new delete 非常奇怪的内存问题

系统 1883 0
代码如下:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> int  i  =   0 , j  =   0 ;
    CJob
**  ppJobs  =  NULL;
    
try
    {
        
int  nCount  =  m_xlist.CountCheckedItems( 0 );
        
if  (nCount)
        {
            ppJobs 
=   new  CJob * [nCount];
            
for  (; i  <  m_xlist.GetItemCount(); i ++ )     //  record all cancel jobs
            {
                
if  (m_xlist.GetCheckbox(i,  0 ==  TRUE)
                {
                    CJob
*  pJob  =  reinterpret_cast < CJob *> (m_xlist.GetItemData(i)); 
                    ppJobs[j] 
=  pJob; 
                    j
++ ;
                }
            }

            
for  (; j  >   0 ; j -- )             //  cancel jobs from array
            {
                ppJobs[j
- 1 ] -> Cancel();
            }
            
            delete [ ] ppJobs;
           
pJobs = NULL;
        }
    }
    
catch ( ){}
_ASSERTE( _CrtCheckMemory( ) );
做的操作非常的简单,就是把一些CJob类的指针先放到 ppJobs 数组里,然后对CJob做一个cancel的操作,最后释放数组。
但是现在问题来了,本来我在ppJobs里面只new 了2个元素8*2个字节,但是,当我delete ppJobs时却删除了8*8 个字节。如图:
new delete 非常奇怪的内存问题
红色改变的部分是我调用
delete [ ] ppJobs;时改变的内存, 实际上它只需要修改8*2个字节就可以了,很明显, 删除的内存越界了。
接着_ASSERTE( _CrtCheckMemory( ) );中断。


暂时还没有找到好地解决办法。。。


new delete 非常奇怪的内存问题


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论