0
由於內存泄漏錯誤,我啓用了堆調試我開始在其他人的代碼中看到,並且將問題固定在某個類的析構函數上(至少,所以我認爲)下面的電話號碼是delete []
。Windows MS上的CRT堆調試VC++ 2005
MyClass::~MyClass() {
delete [] my_class_member_;
}
現在我證實,my_class_member_這是一個指針到一個結構對象的數組,比方說,MyStruct
,一直用new []
所以我不知道是什麼原因造成這種泄漏分配財產?這裏的new []
呼叫的樣子:
delete [] my_class_member_;
my_class_member_ = new MyStruct[somesize_];
接下來,結構MyStruct
也相對簡單,如下(精簡):
struct MyStruct {
MyStruct() {}
~MyStruct() {
for(PtrList<PClass>::iterator it(ps); it.more(); it.next()) {
delete it.cur();
}
for(PtrList<RClass>::iterator it(rs); it.more(); it.next()) {
delete it.cur();
}
delete shift;
}
PtrList<PClass> ps;
PtrList<RClass> rs;
};
現在PtrList
是指針列表(內置我們正在使用的應用程序開發包的類型)..我非常確定不會出現問題。無論如何,任何人都注意到這裏有什麼不妥?感謝任何見解。
你是否遵守了**規則三**?從你提供的信息來看,你是否這樣做並不清楚。你需要提供一個*拷貝構造函數*和*拷貝賦值運算符*,它們對你的動態分配的成員進行深層拷貝。如果你不這樣做,這些操作員不是「私人」的,並且沒有被定義,那麼你不能確定他們沒有被使用,這是你的問題所在。 –
謝謝你可能會對某事..我正在調查。 –
我閱讀了三條規則的文章,但我的理解是,如果沒有完成副本/作業,它應該是安全的,我是對的嗎? –