【发布时间】:2012-06-06 22:14:39
【问题描述】:
int *p=(int * )malloc(sizeof(int));
delete p;
当我们使用 malloc 分配内存时,我们应该使用 free 释放它,当我们在 C++ 中使用 new 分配时,我们应该使用 delete 释放它。
但是如果我们使用 malloc 分配内存然后使用 delete,那么应该会有一些错误。但在上面的代码中,C++ 中没有错误或警告。
此外,如果我们使用 new 反转和分配并使用 free 释放,那么也不会出现错误或警告。
为什么会这样?
【问题讨论】:
-
同时考虑构造函数和析构函数。
-
可能没有警告,但绝对是错误。 (无论如何)
-
"应该有一些错误" - 谁说的?该行为是未定义的,C++ 标准没有对应该发生的事情发表评论。如果你想要一个错误,你可能需要使用另一个工具,比如valgrind。
标签: c++ malloc delete-operator