首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >delete[]和void*会导致内存泄漏吗?

delete[]和void*会导致内存泄漏吗?
EN

Stack Overflow用户
提问于 2011-04-27 03:29:19
回答 2查看 986关注 0票数 0

可能重复: 删除空指针安全吗?

下面的代码会导致内存泄漏吗?

代码语言:javascript
复制
void *ptr = new long [10];
delete[] ptr; // note: ptr is a void*

编辑上面的代码将在编译过程中生成一条警告消息,以指定它为“未定义”。我问这个问题是因为我想知道当调用C++时delete[]是如何处理内存范围的。我应该改变我的问题,使它更具体。

下面的代码会导致内存泄漏吗?

代码语言:javascript
复制
char *ptr = (char *)(new long [10]);
delete[] ptr; // note: ptr is a char*
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-27 03:30:28

不是的。离开delete[]会导致泄漏。顺便说一下,应该是long* ptr。我认为delete[]甚至不会使用void*参数进行编译。

票数 1
EN

Stack Overflow用户

发布于 2011-04-27 03:48:55

我尝试了以下程序(稍微修改了这个例子):

代码语言:javascript
复制
#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++并得到以下编译警告:

代码语言:javascript
复制
leaky.cpp: In function ‘int main()’:
leaky.cpp:13: warning: deleting ‘void*’ is undefined

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5799010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档