You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

const char*变量二次赋值后原字符串"Hello World!"是否会被内存清除?

问题解答

首先给出你提到的代码(补充了语法必要的分号):

const char* str = "Hello World!";
str = "HELLO!";

结论

字符串"Hello World!"会继续保留在内存中,不会被抹去。

原因说明

  • C语言中双引号包裹的内容属于字符串字面量,编译器默认会将这类数据存放在进程地址空间的只读数据段(.rodata段),这部分内存的生命周期和程序运行周期完全一致,程序运行过程中不会被主动释放、修改或抹去。
  • 代码中的const char* str只是一个存储内存地址的指针变量:第一行代码是把"Hello World!"的首地址赋值给str,第二行代码是把另一个字符串字面量"HELLO!"的首地址赋值给str,整个过程只是修改了指针变量本身存储的地址值,不会对两个字符串字面量本身所在的内存产生任何影响。
  • 即使后续没有任何指针指向"Hello World!"的首地址,这块内存也会一直保留,直到程序完全退出后,操作系统才会回收整个进程占用的所有内存资源。

内容的提问来源于stack exchange,提问作者Bonnate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 10:06:04