何时使用Malloc而不是New
重复:我在哪些情况下使用malloc vs new?
只要重新阅读这个问题:
C ++中的“new”和“malloc”和“calloc”有什么区别?
我检查了答案,但没有人回答这个问题:
有几个原因(我能想到两个)。
让最好的浮动到顶部。
想起一对夫妇:
从我发布在该主题上的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时,会溢出缓冲区。