我在想C++中的delete []操作符。 (我正在使用Visual Studio 2005)。刪除[]和內存泄漏
我有一個託管DLL正在調用的非託管DLL。當我在調試時執行幾個任務後關閉了這個程序時,我得到了很多(數千?)內存泄漏,大部分是24字節 - 大小爲44字節。我懷疑這可能是由於我有一個非託管DLL。
無論如何,從我的理解,如果我有以下代碼:
char* pointer = new char[500]
/* some operations... */
delete[] pointer;
然後,所有它的內存是否正確釋放了,對嗎?
時會發生什麼,我有以下代碼:
char* pointer = new char[500];
char* pointerIt = pointer;
/* some code perhaps to iterate over the whole memory block, like so */
for (int i = 0; i < 250; i++){ // only iterate halfway
*pointerIt = 0;
pointerIt++;
}
delete[] pointer;
內存指針指向被刪除嗎?所以這意味着指針現在不是指向有效的內存..但沒關係,因爲我可以將兩個指針設置爲NULL,對吧?
不管怎麼說,現在會發生什麼,如果我這樣做:
char* pointerFirstPosition = new char[500];
char* pointerIt = pointerFirstPosition;
for (int i = 0; i < 250; i++){ // only iterate halfway
*pointerIt = 0;
pointerIt++;
}
delete[] pointerIt; // delete the pointer iterator...
將這個代碼由pointerIt刪除內存塊指出,高達pointerIt +500?或者它會刪除pointerFirstPos指向pointerFirstPos +500的內存塊嗎?
這可能導致內存泄漏?
對不起,我試圖讓我的信息清晰。
感謝,
克雷布斯
「但沒關係,因爲我可以設置兩個指針爲NULL,對吧?」那麼,你應該完成這些指針...... – GManNickG 2009-08-13 03:03:23