我在想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