它是否真的在某些编译器/机器上工作,但在其他编译器/机器上会导致堆损坏和崩溃?
有人知道幕后发生了什么吗?
最佳答案
当您使用 delete
时,C++ 想要在对象上调用析构函数,但是将它传递给 free
不允许这种情况发生。如果对象包含其他对象,那么这些对象的析构函数也不会被调用。如果对象中有指针,那么这些指针就不会被释放。
此外,C++ 的 new
和 delete
实际上可以从 malloc
请求更多的内存,并将额外的内存用于记账(例如存储析构函数的地址),因此您传递给 free
的指针实际上不会是 malloc
ed。
关于c++ - 为什么在分配有 'new' 的指针上调用 free() 会导致堆损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3505830/