以下代码是否会导致内存泄漏?
void *ptr = new long [10];
delete[] ptr; // note: ptr is a void*
[编辑] 上面的代码将在编译期间生成警告消息,以将其指定为“未定义”。 我问这个原因我想知道在调用delete []时C ++如何处理内存范围。 我应该改变我的问题,使其更明确。
以下代码是否会导致内存泄漏?
char *ptr = (char *)(new long [10]);
delete[] ptr; // note: ptr is a char*
答案 0 :(得分:1)
没有。离开delete[]
会导致泄漏。顺便说一句,它应该是long* ptr
。我认为delete[]
甚至不会使用void*
参数进行编译。
答案 1 :(得分:1)
我尝试了以下程序(略微修改了this example):
#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
当你运行它时......失败!当您尝试删除该指针时,该进程将终止(无效指针)。