完美解决: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(),我以前释放掉了。
之后又调用了,就出现这种情况了。