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

标签 c++ memory heap-memory

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

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

最佳答案

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

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

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

相关文章:

c++ - 如何从显式方程构造多边形?

c++ - 如果我在 C++ 中以 new 的放置形式使用的内存不足会怎样?

winapi - GlobalFree() 导致用户断点...内存块是固定的,未锁定,单个模块,无 DLL

python - 内存效率 : One large dictionary or a dictionary of smaller dictionaries?

javascript - JavaScript React 项目中的高 Jest 堆内存使用率

c++ - 在 vector 中查找不相等的相邻索引

c++ - UE4和Azure存储SDK

memory - boost 锁无锁spsc_queue缓存访问

java - 如何解决 java.lang.OutOfMemoryError : Java heap space without increasing the heap memory size

java - 内存如何分配给 lambda |它是如何被非父类(super class)引用变量引用的