C++中的 malloc/free 和 new/delete 兼容性
malloc/free and new/delete compatibility in C++?
这里有一个很好的malloc/free和new/delete的比较,以及malloc()和free()在这里如何工作的很好的解释。显然,我们不会将它们混合使用 - 使用 free 与新的或删除与 malloc。
我们可以看到很多开源项目,有许多贡献者,使用这两种机制,同时尊重上述"无混合"规则。通常,您在一个文件中只有一种方式(一个作者,一个首选项)。我已经分叉了这样一个项目,并且正在使用new/delete添加一些功能。但是我遇到了一些奇怪的内存损坏。当然,我可能对他们负责,但是.....
这导致我问一些"幼稚"的问题:
-
我可以在同一个编译单元 (*.o) 中同时使用malloc/free和new/delete两种机制吗 - 当然,尊重"无混合"规则?
-
我可以交错这两种机制吗,就像在这段代码中一样?
int *a = (int *) malloc (1000 * sizeof int); int *b = new int[1000]; // some code free a; delete[] b;
是的,您可以交错它们 - 只需使用与用于分配的函数匹配的释放函数。仅当您使用错误的释放函数时,才会出现问题。
请注意,当您有多个库时,这并不容易 - 这些库可能使用不同的堆,因此即使您使用正确的命名函数,它也可能发生在错误的模块中实现,因此使用错误的堆,这将导致您直接进入未定义的行为。请参阅此答案以更好地了解我在这里谈论的内容。
相关文章:
- new[] / delete[] 并在C++中抛出构造函数/析构函数
- QQuickView new-delete-type-mismatch
- 创建 myNew/myDelete 以替换 new/new[]/delete/delete[]
- 为多线程环境包装 c++ new/delete 的安全/好方法
- c++ 运算符 new[]/delete [] 是否调用运算符 new/delete?
- C++内存分配失败(使用 new & delete)
- c++重载运算符new delete
- 在 C++ 中将 malloc/free 替换为 new/delete
- new/delete 和 ::new/::d elete 有什么区别?
- 我什么时候应该在C++中重载new/delete
- 在C++中,"new/delete"在结构上代替"malloc/free"有多好?
- 为什么我的信号槽比QThreadPool+new+delete慢
- malloc()/free()/new/delete/delete[] 的算法复杂度是多少?
- C++中new[]/delete[]与new/delete之间的差异
- 标准C++的哪些部分将调用malloc/free而不是new/delete
- C++中的 malloc/free 和 new/delete 兼容性
- 编译器将 malloc/free 或 new/delete 对优化为 alloca
- 在 ANSI C 中使用 new/delete 的缺点
- 为什么使用 malloc/free,当我们有 new/delete 时
- c++如何知道在new/delete之后指向内存的位置