我想了解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到pointerIt+500吗?还是会删除由pointerFirstPos指向的内存块,范围是从pointerFirstPos到pointerFirstPos+500呢?
这可能导致内存泄漏吗?
抱歉我的留言有点冗长,我想要清楚地表达我的意思。
谢谢,
kreb