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

Pra*_*hra 1 c++ free dynamic-memory-allocation

据我了解,delete[]用于释放分配的内存空间new.free()也可以用来释放那个内存空间.那么在释放内存free()代替时我将面临哪些类型的问题delete[]

πάν*_*ῥεῖ 5

" free()也可以用来释放那个内存空间."

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

"那么在释放内存free()代替时我必须面对哪些类型的问题delete[]?"

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

POSIX兼容参考(强调我的):

free()函数应使ptr指向的空间解除分配; 也就是说,可供进一步分配.如果ptr是空指针,则不会发生任何操作.否则,如果该参数不匹配的指针早些时候返回的calloc(),malloc(),posix_memalign(),realloc(),或strdup()功能,或如果空间已经通过调用释放到free()或realloc(),该行为是不确定的.

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

好吧,某些实现new[]new()可能依赖于该malloc()功能系列,其他实现可能不依赖.因此,您无法确定分配的内存指针可以安全地使用(即使您不关心析构函数调用问题).


结论:

用法delete[]很好地定义为对使用分配的内存进行操作new[],delete对应于结果new.

同样,free()只有在使用malloc()函数系列分配的内存中才能很好地定义使用.


至于应用于你的(原始)问题的标签,因为c不支持deletenew询问这个c语言是没有用的.