new delete 非常奇怪的内存问题

本文探讨了一个关于C++中CJob类指针数组的内存管理问题。具体表现为分配了较少数量的内存,但在释放时却尝试释放远超过实际分配大小的空间,导致程序中断。该文详细记录了问题发生的上下文及现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码如下:
<!--<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(dot.gif){}
_ASSERTE( _CrtCheckMemory( ) );
做的操作非常的简单,就是把一些CJob类的指针先放到ppJobs 数组里,然后对CJob做一个cancel的操作,最后释放数组。
但是现在问题来了,本来我在ppJobs里面只new 了2个元素8*2个字节,但是,当我delete ppJobs时却删除了8*8 个字节。如图:

红色改变的部分是我调用
delete [ ] ppJobs;时改变的内存, 实际上它只需要修改8*2个字节就可以了,很明显, 删除的内存越界了。
接着_ASSERTE( _CrtCheckMemory( ) );中断。


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值