[英]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标记,由于c不支持delete
或new
要求使用c语言,因此这是毫无用处的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.