使用C ++删除malloc的行为

int *p=(int * )malloc(sizeof(int));

delete p;

当我们使用malloc分配内存时,我们应该释放它,当我们在C ++中使用新分配时,我们应该使用delete来释放它。

但是如果我们使用malloc分配内存然后使用delete,那么应该会出现一些错误。 但是在上面的代码中,C ++没有错误或警告。

此外,如果我们使用免费的新版本和版本进行反向和分配,那么也没有错误或警告。

为什么这样?


这是未定义的行为,因为没有办法可靠地证明指针背后的内存是正确分配的(即,通过delete new的或delete[] new[] delete[] )。 确保这样的事情不会发生是你的工作。 使用正确的工具即智能指针很简单。 每当你说delete ,你做错了。


那么应该有一些错误

有。 这只是未必明显。

C ++标准(以及C ++标准所建模的C标准)将这种错误称为未定义行为。 通过未定义,它们意味着什么都可能发生。 程序可能会正常继续,它可能会立即崩溃,它可能会产生一个明确定义的错误消息并正常退出,它可能会在实际未定义的行为事件之后的某个时间开始出现随机错误,或者调用鼻子恶魔。

注意并消除这些错误是你的责任。 没有什么能保证在发生时提醒你。


使用free()不能delete

如果你malloc你就必须拨打free来释放内存。

如果你是new你必须调用delete来释放内存。

这是解释它的链接。

链接地址: http://www.djcxy.com/p/78491.html

上一篇: Behaviour of malloc with delete in C++

下一篇: C++ memory allocation mechanism performance comparison (tcmalloc vs. jemalloc)