【发布时间】:2010-11-19 04:19:53
【问题描述】:
我想知道 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;
指针指向的内存被删除了对吧?所以这意味着pointerIt现在没有指向有效内存..但这没关系,因为我可以将两个指针都设置为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,对吗?"好吧,你应该完成指针......
标签: c++ visual-c++ memory-management memory-leaks