gpt4 book ai didi

c++ - 为什么在分配有 'new' 的指针上调用 free() 会导致堆损坏?

转载 作者:IT王子 更新时间:2023-10-28 23:38:43 27 4
gpt4 key购买 nike

它是否真的在某些编译器/机器上工作,但在其他编译器/机器上会导致堆损坏和崩溃?

有人知道幕后发生了什么吗?

最佳答案

当您使用 delete 时,C++ 想要在对象上调用析构函数,但是将它传递给 free 不允许这种情况发生。如果对象包含其他对象,那么这些对象的析构函数也不会被调用。如果对象中有指针,那么这些指针就不会被释放。

此外,C++ 的 newdelete 实际上可以从 malloc 请求更多的内存,并将额外的内存用于记账(例如存储析构函数的地址),因此您传递给 free 的指针实际上不会是 malloced。

关于c++ - 为什么在分配有 'new' 的指针上调用 free() 会导致堆损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3505830/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com