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

时间:2015-05-11 18:06:23

标签: c++ free dynamic-memory-allocation

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

1 个答案:

答案 0 :(得分:5)

  

free()也可用于释放该内存空间。”

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

  

“当使用free()代替delete[]释放内存时,我将面临哪些类型的问题?”

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

来自POSIX compliant reference(强调我的):

  

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

     

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

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

结论:

delete[]的用法仅定义为对使用new[]分配的内存进行操作,delete对应new的结果。

同样,free()的使用只能与使用malloc()函数系列分配的内存一起很好地定义。

至于应用于您(原始)问题的标记,因为c不支持deletenew要求这个c语言是没用的