何时使用Malloc而不是New

重复:我在哪些情况下使用malloc vs new?

只要重新阅读这个问题:
C ++中的“new”和“malloc”和“calloc”有什么区别?

我检查了答案,但没有人回答这个问题:

  • 我什么时候可以使用malloc而不是新的?
  • 有几个原因(我能想到两个)。
    让最好的浮动到顶部。


    想起一对夫妇:

  • 当你需要在C ++和C之间移植代码时
  • 当您在可能从C调用的库中分配内存时,C代码必须释放分配。

  • 从我发布在该主题上的new/malloc的Stroustrup FAQ:

    无论何时使用malloc(),都必须考虑将返回指针的初始化和转换转换为适当的类型。 你还必须考虑是否有足够的字节数供你使用。 考虑初始化时,malloc()和new之间没有性能差异。

    这应该回答你的问题。


    在C ++中,几乎没有。 new通常是malloc的一个包装器,它调用构造函数(如果适用)。

    但是,至少在Visual C ++ 2005或更高版本中,使用malloc实际上会导致新的安全漏洞。

    考虑这个代码:

    MyStruct* p = new MyStruct[count];
    MyStruct* p = (MyStruct*)malloc(count* sizeof(MyStruct));
    

    他们看起来很平等。 但是,第一个count * sizeof(MyStruct).实际上会检查count * sizeof(MyStruct).的整数溢出count * sizeof(MyStruct). 如果count来自不可信源,则可能会导致整数溢出,导致分配少量内存,但是当您使用count时,会溢出缓冲区。

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

    上一篇: When to use Malloc instead of New

    下一篇: C++: is malloc equivalent to new?