删除[] with void *会导致内存泄漏吗?

时间:2011-04-27 03:29:19

标签: c++ void-pointers delete-operator

  

可能重复:
  Is it safe to delete a void pointer?

以下代码是否会导致内存泄漏?

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*

2 个答案:

答案 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

当你运行它时......失败!当您尝试删除该指针时,该进程将终止(无效指针)。