malloc / free和new / delete在C ++中的兼容性?

这里有一个比较好的malloc / free和new / delete,以及malloc()和free()如何在这里工作的很好的解释。 显然,我们不能混用它们 - 使用new或free来使用malloc。

我们可以看到许多开源项目,与许多贡献者一起使用这两种机制,同时尊重上述“不混合”规则。 Usualy,你在一个文件中只有一种方法(一个作者,一个偏好)。 我已经分叉了这样一个项目,并且使用新的/删除来添加一些功能。 但是我遇到了一些好奇的记忆腐败。 当然,我可能对他们负责,但.....

这让我想问一些“天真”的问题:

  • 我可以在同一个编译单元(* .o)中同时使用malloc / free和new / delete两种机制 - 当然,尊重“不混合”规则?

  • 我可以交错两种机制,就像在这个代码中一样?

    int *a = (int *) malloc (1000 * sizeof int);
    
    int *b = new int[1000];
    
    // some code
    
    free a;
    
    delete[] b;
    

  • 是的,你可以交错它们 - 只要使用一个与用于分配的函数匹配的解除分配函数。 只有使用错误的释放函数时才会出现此问题。

    请注意,当你有几个库时 - 这些库可能会使用不同的堆,并不那么容易,所以即使你使用了一个正确的命名函数,它也可能碰巧在错误的模块中实现,因此使用错误的堆将会把你驱动到undefined行为。 看到这个答案可以更好地了解我在这里讨论的内容。

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

    上一篇: malloc/free and new/delete compatibility in C++?

    下一篇: What is the difference between "new" and "malloc" and "calloc" in C++?