int *p=(int * )malloc(sizeof(int));
delete p;
当我们使用 malloc 分配内存时,我们应该使用 free 释放它,当我们在 C++ 中使用 new 分配时,我们应该使用 delete 释放它。
但是如果我们使用 malloc 分配内存,然后使用 delete,那么应该会出现一些错误。但是在上面的代码中,没有错误或警告C++出现。
此外,如果我们使用新的反转和分配并使用免费发布,那么也没有错误或警告。
为什么会这样?
未定义的行为,因为没有办法可靠地证明指针后面的内存被正确分配(即通过new
用于delete
或new[]
用于delete[]
)。你的工作是确保这样的事情不会发生。当您使用正确的工具(即智能指针)时,这很简单。每当你说delete
,你就做错了。
那么应该有一些错误
有。只是不一定很明显。
C++标准(以及 C++ 标准建模的 C 标准)将这种错误称为未定义行为。未定义的意思是任何事情都可能发生。程序可能会正常继续,可能会立即崩溃,可能会产生定义明确的错误消息并优雅地退出,它可能会在实际未定义的行为事件之后的某个时间开始显示随机错误,或者调用鼻魔。
您有责任注意并消除这些错误。当它们发生时,没有什么可以保证提醒您。
使用free()
而不是delete
。
如果您malloc
则必须调用free
以释放内存。
如果new
则必须调用delete
以释放内存。
这是一个解释它的链接。