_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;刪除原來的空間,這樣就知道了原因所在,希望對大家有幫助。



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