我正在研究一个C库,其中一个函数返回一个(新分配的)指向一个双精度数组的指针. API声明调用者有责任释放内存.
但是,C库曾经在C中实现,并且有问题的函数使用malloc()分配内存.它还假定调用者将使用free()释放该内存.
我可以通过调用new来安全地替换对malloc()的调用吗?如果我这样做,现有的客户端代码(使用free()会中断吗?到目前为止,我所能找到的只是free()的官方文档,其中说明了
If ptr does not point to a block of memory allocated with [malloc,calloc or realloc],it causes undefined behavior.
但我相信这是在C与其自己的分配运算符一起出现之前编写的.
解决方法
The contents are the same as the Standard C library header stdlib.h,with the following changes:
和:
The functions calloc(),malloc(),and realloc() do not attempt to allocate storage by calling ::operator
new() (18.6).
和:
The function free() does not attempt to deallocate storage by calling ::operator delete().
See also: ISO C Clause 7.11.2.
并包含其他更改,其中没有一项表明我们可以免费使用新分配的内容.因此,第7.20.3.2节C99标准草案中的自由功能仍然是适当的参考,它说:
Otherwise,if the argument does not match a pointer earlier returned by the calloc,malloc,or realloc function,or if the space has been deallocated by a call to free or realloc,the behavior is undefined.