使用free()释放new分配的内存空间

Releasing memory space allocated by new using free()

本文关键字:分配 内存 空间 new 释放 free 使用      更新时间:2023-10-16

据我所知,delete[]用于释放new分配的内存空间。CCD_ 3也可以用于释放该存储器空间。那么,当使用free()代替delete[]释放内存时,我将不得不面对哪种类型的问题?

"free()也可以用来释放内存空间。">

否,free()不能用于释放分配有new()new[]的内存。

"那么,当使用free()代替delete[]释放内存时,我将不得不面对哪种类型的问题?">

为分配有new[]的内存使用free()而不是delete[]是未定义的行为(此外,不会调用复杂对象的析构函数),这可能会导致运行时异常。

来自POSIX兼容参考(强调矿):

free()函数将导致ptr指向的空间被释放;即可用于进一步分配。如果ptr是空指针,则不会发生任何操作。否则,如果参数与calloc()malloc()posix_memalign()realloc()strdup()函数先前返回的指针不匹配,或者如果对free()或realloc()的调用释放了空间,则行为未定义

任何引用释放空间的指针的使用都会导致未定义的行为

好吧,new[]new()的一些实现可能依赖于malloc()函数族,而其他实现可能不依赖。因此,您不能确定已分配的内存指针可以安全地与free一起使用(即使您不关心析构函数调用问题)。


结论:

delete[]的使用仅被很好地定义为对使用new[]分配的存储器进行操作,delete对应于new的结果。

同样,free()的使用仅结合使用free()0函数族分配的内存进行了很好的定义。


关于应用于您(原始)问题的c标记,由于c不支持deletenew,因此为c语言询问这一点是非常无用的