所以我決定在pesty C++中插入一點。調試斷言錯誤 - 在字符指針上刪除調用
當我調用一個指向我創建的簡單類的指針的刪除函數時,我受到Debug Assertion Failure -Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
的迎接。我認爲這是因爲我處理錯誤的字符串操作,從而導致內存損壞。
我創建了一個基本類,[I] animal [/ I],它具有可以通過函數設置的字符串。
// name
char * ptrName;
animal::animal(char * name)
{
this->SetName(name);
};
animal::~animal()
{
delete [] ptrName;
}
void animal::SetName(char * name)
{
ptrName = name;
};
當使用上面的類如下所示時,會發生錯誤。我試過delete ptrName
和delete [] ptrName
,但無濟於事。
animal * cat = new animal("Optimus Prime");
delete cat;
我錯過了什麼?
我剛剛從Amazon訂購了Accelerated C++。當您將name_變量設置爲新值時,不需要取消分配name_變量的原因是什麼? – 2010-08-07 18:23:10
所有的分配和釋放邏輯都隱藏在std :: string的後面。 – 2010-08-07 18:38:01
@Qua:當它是'std :: string'時,那麼這個類會爲你處理內存管理。當它是C字符串(指向動態分配數組的第一個字符的指針)時,必須手動完成。但是,你還必須跟蹤哪個指針真的指向一個動態分配的數組。字符串文字不是動態分配的,所以它不需要'delete []''d。但是在你的類的內部,你不知道指針是否指向動態分配的數組。所以你必須總是把它複製到你自己的數組中,然後離開... – sbi 2010-08-07 18:43:08