c – free()由new分配的内存是否安全?

前端之家收集整理的这篇文章主要介绍了c – free()由new分配的内存是否安全?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > new,delete,malloc & free2个
我正在研究一个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与其自己的分配运算符一起出现之前编写的.

解决方法

你不能混合搭配malloc和free与new并删除草案C标准参考C99标准为此,如果我们去 draft C++ standard部分20.6.13 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.

原文链接:https://www.f2er.com/c/117859.html

猜你在找的C&C++相关文章