_BLOCK_TYPE_IS_VALID assertion failed

网上看到的说明是这样的:

原因:1.内存泄漏;所以当程序退出时,系统会收回分配的内存,于是调析构函数,由于内存已被错误地释放,于是就会出现“Debug Assertion Failed”的错误。


2.这个assert说明什么问题呢?说明有一块内存在被释放的时候,它的头部里面的信息已经被改掉了,和预期的不一样。内存分配的程序往往在被分配出的内存块头部放上一些校验信息。这个信息内存的用户是不知道也不应该修改的。这样,在内存被释放的时候,内存分配程序就可以验对这个头部信息是否被改过了。若被改过,就说明发生了内存corruption. 这种corruption有两种可能性:1)有人在内存越界写东西;或者:2)这块内存已经被释放了,又被重复释放了一次。 (在第一次被释放中,是内存分配程序改掉了头部信息)。

3.pHead_>nBlockUse就可能是空指针,或它指向的东西已经不存在了。

自己在解决这个问题时:

当时在类里面的定义:

class nnn
{


    private:
char *buff;
public:
nnn()
{
buff=new char[2];
}
~nnn()
{
delete []buff;
}
void change()
{
/*buff[0]='s';
buff[1]='s';*/
buff="ss";
}


};

其中buff本来有一块内存,但是后来通过buff="ss";将buff首地址指向“ss”(这是个常量空间)了,应该是内存改了地址,所以不能用delete []buff;删除原来的空间,这样就知道了原因所在,希望对大家有帮助。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章