2022最新修复:Free Heap block modified at after it was freed

完美解决:HEAP: Free Heap block XXX modified at XXX after it was freed

  • 前言
    • 几个案例
        • 案例一、如下:
        • 案例二、如下:
    • 最终解决


前言

内存分配释放代码,容易出现这种问题。主要原因:内存已经被释放后,还继续调用

出现这样问题的根本原因就是野指针,即:对已经释放了的内存进行写操作


几个案例

案例一、如下:

float* f= new float [d];
for(int g=0;g<10;g++){//关注公众号:小千哥
    for(int i=0;i<d;i++){
    	f[i]=0;
    }
	delete[] f;
}

解决方式:
g=1执行delete[] f;会报错
因为:f分配的内存在g=0是就已经被删除了,变成了野指针,所以第二次循环时无法再次删除。

案例二、如下:

int* h = new int;
int* yo = h;//关注公众号:小千哥
delete h;
 
*yo= 1; //给野指针赋值

在野指针赋值后,下次内存分配,分配到上yo所指地址段,DEBUG调试时,就会出现Free Heap block 公众号小千哥 modified at YYY after it was freed提示。

最终解决

刚开始以为是多线程的问题,研究了好久,网上文章都没用。

最后发现是获取getInhook(),我以前释放掉了。

之后又调用了,就出现这种情况了。

你可能感兴趣的:(c++,算法,c++)