free()分配的新内存是否安全?

lin*_*lof 6 c++ memory-management

我正在研究一个C++库,其中一个函数返回一个(新分配的)指向一个双精度数组的指针.API声明调用者有责任释放内存.

但是,C++库曾经在C中实现,并且有问题的函数会分配内存malloc().它还假定调用者将释放该内存free().

我可以通过电话安全地替换malloc()呼叫new吗?现有的客户端代码(free()如果我这样做会使用中断吗?到目前为止我能找到的是官方文档free(),其中说明了这一点

如果ptr没有指向使用[malloc,calloc或realloc]分配的内存块,则会导致未定义的行为.

但我相信这是在C++与自己的分配运算符一起出现之前编写的.

edt*_*guy 17

你必须匹配调用mallocfreenewdelete.混合/匹配它们不是一种选择.

  • ..还匹配`new []`和`delete []`. (2认同)

Sha*_*our 8

你不允许混合和匹配malloc,并freenewdelete该草案C++标准是指回C99标准这一点,如果我们去的草案C++标准部分20.6.13 的C库,它说(重点矿山前进):

内容与标准C库头stdlib.h相同,但有以下更改:

和:

calloc(),malloc()和realloc()函数不会通过调用:: operator new()(18.6)来尝试分配存储.

和:

函数free()不会尝试通过调用:: operator delete()来释放存储空间.另见:ISO C条款7.11.2.

并包含其他更改,其中没有任何更改说明我们可以free在分配的内容上使用new.因此,C99标准草案中7.20.3.2 的自由功能仍然是适当的参考,它说:

否则,如果参数与之前由calloc,malloc或realloc函数返回的指针不匹配,或者如果通过调用free或realloc释放了空间,则行为未定义.