c++ - 字符 *数据 = "abc";免费((无效*)数据);为什么要进行 void* 转换?有必要吗?

标签 c++ c

有一个 C 风格的字符串,我需要释放它的内存。我看到了以下代码示例,但对为什么 (void*) 在那里感到困惑。

char *data = "abc";
free( (void*)data );

只有两个问题:

  1. 为什么不简单地免费(数据)

  2. (void*) 转换是必须的吗?

非常感谢。

最佳答案

不,没有必要; free() 调用是错误的,您不能这样做。

Actor 是一个巨大的闪烁、弹跳和尖叫的警告标志,原始程序员感到困惑。

将先前调用 malloc() 或其 friend 之一未返回的指针传递给 free() 是未定义的行为。 Actor 是这里最少的问题。

您永远无法“释放”字符串文字使用的内存,因为该内存永远不会以程序控制的某种方式分配。它不在堆上,堆是动态内存分配/释放通常发生的地方。你的意图是错误的。

您所能做的就是将指针设置为NULL:

data = NULL;

虽然这不会以任何方式“释放”在幕后用于保存字符数据 “abc” 的内存,但这没关系。

关于c++ - 字符 *数据 = "abc";免费((无效*)数据);为什么要进行 void* 转换?有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24157384/

相关文章:

c - RPI3 上 kaa C sdk 的奇怪行为

java - C++ 列出用法

c++ - 调用 GetWindowRect 时出现编译器错误

c++ - Linux 上共享内存的生命周期是多少

c - Ubuntu 12.04 上的 IBM DB2 v10.1 找不到 C 头文件

c - 一种在函数调用中定义新变量的方法

c++ - 在 O(nlogn) 中查找数组中的所有差异,其中 n 是元素的最大范围

c++ - 将多个参数从另一个类传递给线程函数

旧版本 GCC 的 C++/Fortran 间语言 ABI 问题

用键盘或其他硬件按钮控制 Helm 机?