BS:我已經測試過,下面的問題是VS2010特定的,在我對Mingw的測試中,矢量內存泄漏, printf(「%d \ n」,testV-> size )); 給我'10',這表明它是一個泄漏。爲什麼矢量指針的內存自動清零
在代碼象下面這樣:
class Test{
public:
std::vector<int> *num;
int *n;
};
Test *t = new Test();
t->num = new std::vector<int>;
t->num->assign(10,10);
t->n = new int[20];
t->n[0] = 12345;
int *testN = t->n;
std::vector<int> *testV;
testV = t->num;
delete t;
//I can print n's memory
printf("%d\n", testN[0]); //get 12345, so memory leaked here.
//I can't print num's memory; its size is 0. in release version, it's negative number.
printf("%d\n", testV->size());
刪除to後,我看到內存NUM點被清除,在我VS10的環境中,我可以看到它的內存清理,「EE FE EE FE .. ..'。 但n的記憶保持不變。
在我看來,所有內存都來自關鍵字new,應該通過刪除來釋放,好吧,這裏num(向量)是 不是'刪除',而是自動清除。
我想知道矢量指針與其他指針不同嗎?
指向矢量的指針並沒有不同。儘管你的調試器可能導致你相信,但你仍然必須在這個新的指針上調用delete。 – juanchopanza
你的測試不會向任何初始值填充矢量,所以當然'testV-> size()'將爲0. – greatwolf
對不起,我現在填充了它,它的大小是負數,所以我猜測內存是自動清潔?我只是困惑爲什麼它不是10了,如果這個內存泄漏,它應該保持不變? –