_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;删除原来的空间,这样就知道了原因所在,希望对大家有帮助。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值