繁体   English   中英

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

[英]Releasing memory space allocated by new using free()

据我了解, delete[]用于释放new分配的内存空间。 free()也可用于释放该内存空间。 那么当使用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结果。

同样,只有结合使用malloc()函数族分配的内存,才能很好地定义free()用法。


至于应用于您的(原始)问题的标记,由于c不支持deletenew要求使用c语言,因此这是毫无用处的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM