當測試我的代碼時,我始終得到有關使用delete的錯誤,因爲我的類的測試臺指出刪除正在使用new []分配的數組上調用。我在我的〜IntVector中刪除了兩個擴展函數,擴展函數擴展了容量,同時爲動態分配的數組重新分配內存。不正確的解除內存分配?
如何正確使用刪除以防止內存泄漏並解決此錯誤?
主文件
#include "IntVector.h"
#include <iostream>
#include <vector>
using namespace std;
IntVector::~IntVector(){
delete[] data;
}
void IntVector::expand(){
cap = cap * 2;
int *data2 = data;
data = new int[cap];
data = data2;
delete data2;
delete[] data2;
}
void IntVector::expand(unsigned amount){
cap = amount;
int *data2 = data;
data = new int[cap];
data = data2;
delete data2;
delete[] data2;
}
頭
#ifndef INTVECTOR_H
#define INTVECTOR_H
using namespace std;
class IntVector{
private:
unsigned sz;
unsigned cap;
int *data;
private:
void expand();
void expand(unsigned amount);
};
#endif
我的析構函數是〜IntVector。 – user3314899
您發佈了很多代碼,很難錯過所有代碼中的這樣一個小函數。你可能想閱讀[堆棧溢出問題清單](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)。您可能還想了解[SSCCE](http://sscce.org/)是什麼。 –
@ user3314899 - 立即執行一個2行main()程序,可以讓你的班級平躺在它的臉上: 'int main(){IntVector a(10); IntVector b = a;}' 這就是你所需要的 - 你在main()的末尾有一個雙重刪除錯誤。如果我再添加兩行,我可以重現內存泄漏。正如其他人建議克服這個錯誤一樣,閱讀三條規則。 – PaulMcKenzie