可能重复: 删除空指针安全吗?
下面的代码会导致内存泄漏吗?
void *ptr = new long [10];
delete[] ptr; // note: ptr is a void*编辑上面的代码将在编译过程中生成一条警告消息,以指定它为“未定义”。我问这个问题是因为我想知道当调用C++时delete[]是如何处理内存范围的。我应该改变我的问题,使它更具体。
下面的代码会导致内存泄漏吗?
char *ptr = (char *)(new long [10]);
delete[] ptr; // note: ptr is a char*发布于 2011-04-27 03:30:28
不是的。离开delete[]会导致泄漏。顺便说一下,应该是long* ptr。我认为delete[]甚至不会使用void*参数进行编译。
发布于 2011-04-27 03:48:55
我尝试了以下程序(稍微修改了这个例子):
#include <iostream>
#include <new>
using namespace std;
struct myclass {
myclass() {cout <<"myclass constructed\n";}
~myclass() {cout <<"myclass destroyed\n";}
};
int main () {
void * pt = new myclass[3];
delete[] pt;
return 0;
}使用g++并得到以下编译警告:
leaky.cpp: In function ‘int main()’:
leaky.cpp:13: warning: deleting ‘void*’ is undefined当你运行it...fail!当尝试删除该指针时,该进程将终止(无效指针)。
https://stackoverflow.com/questions/5799010
复制相似问题