有一个 C 风格的字符串,我需要释放它的内存。我看到了以下代码示例,但对为什么 (void*)
在那里感到困惑。
char *data = "abc";
free( (void*)data );
只有两个问题:
为什么不简单地
免费(数据)
?(void*)
转换是必须的吗?
非常感谢。
最佳答案
不,没有必要; free()
调用是错误的,您不能这样做。
Actor 是一个巨大的闪烁、弹跳和尖叫的警告标志,原始程序员感到困惑。
将先前调用 malloc()
或其 friend 之一未返回的指针传递给 free()
是未定义的行为。 Actor 是这里最少的问题。
您永远无法“释放”字符串文字使用的内存,因为该内存永远不会以程序控制的某种方式分配。它不在堆上,堆是动态内存分配/释放通常发生的地方。你的意图是错误的。
您所能做的就是将指针设置为NULL
:
data = NULL;
虽然这不会以任何方式“释放”在幕后用于保存字符数据 “abc”
的内存,但这没关系。
关于c++ - 字符 *数据 = "abc";免费((无效*)数据);为什么要进行 void* 转换?有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24157384/