有一个C风格的字符串,我需要释放它的记忆.我看到了下面的代码示例,但对于为什么(void*)存在感到困惑.
char *data = "abc";
free( (void*)data );
Run Code Online (Sandbox Code Playgroud)
只有两个问题:
为什么不简单free(data)?
是(void*)转换是必须的?
非常感谢.
不,这是没有必要的; 该free()呼叫是错误的,你不能做到这一点.
演员是一个巨大的眨眼,弹跳和尖叫的警告标志,原始程序员感到困惑.
将未被前一次调用返回的指针传递给malloc()它或其中一个朋友,这是未定义的行为free().演员阵容是这里最少的问题.
您永远不能"释放"字符串文字所使用的内存,因为该内存永远不会以程序控制的某种方式分配.它不在堆上,而堆通常发生动态内存分配/释放.你的意图是错的.
你所能做的就是将指针设置为NULL:
data = NULL;
Run Code Online (Sandbox Code Playgroud)
虽然不会以任何方式"释放"幕后使用的内存来保存角色数据"abc",但这很好.