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

C语言结构体中字符串字面量的内存分配位置问询

字符串字面量"hello world!"的内存分配位置解析

首先明确核心要点:

  • malloc(sizeof *bar_ptr)仅在堆上分配了Bar结构体实例的内存空间,这个空间包含int a和char* str两个成员变量。
  • 代码中bar_ptr->str = "hello world!";这一步,只是把字符串字面量的起始地址赋值给了结构体里的str指针,并没有将字符串内容拷贝到堆内存中。

字符串字面量"hello world!"实际存储在程序的只读数据段(通常标记为.rodata段),属于进程的静态内存区域:

  • 这块内存是程序加载时就被分配的,生命周期贯穿整个程序运行过程,只有程序退出后才会被系统回收。
  • 特别注意:字符串字面量是只读的,任何尝试修改其内容的操作都会触发未定义行为。

额外补充:你调用free(bar_ptr)释放的只是堆上的结构体空间,并不会影响"hello world!"所在的内存——因为str只是一个指向它的指针,并没有持有这块内存的所有权。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:20:32