在用vs写程序,遇到了一些问题,_BLOCK_TYPE_IS_VALID(pHead->nBlockUse是其中的一个,后来在网上查了一下,得到相关信息,特记录一下,以备查看。
例如以下程序可能导致这个错误:
#include<iostream>
using namespace std;
int main()
{
int j=3;
int *a=new int;
cout<<a<<": "<<*a<<endl;
cout<<&j<<": "<<j<<endl;
a=&j;
cout<<a<<": "<<*a<<endl;
cout<<&j<<": "<<j<<endl;
//delete a;
system("pause");
return 0;
}
运行结果:
但是上面程序存在一个问题,就是a是一个堆内存,但是没有释放,即delete a,当我去掉注释的delete a;时,却出现了
没错,就是这个错误,那么问题出在那里呢?
其实,在给指针a复制时,a=&j;而对于局部变量j来说,是存储在桟内存中的,所以这个指针a也指向了桟内存中存放的值的地址,那么存取这个值都是没有错的,最关键的,就是释放,因为桟内存是程序结束后自动释放的,而堆内存需要显式释放,如果在程序结束后,j变量对应的值已经不存在了,那么此时的delete就释放了一个已经被释放的内存,则会出现错误。
如有错误,请指正。