C语言中char*函数返回的内存会在调用函数foo结束时释放吗?
字符串字面量的内存释放问题
你的代码里,function()返回的是字符串字面量 "string",这类字符串的内存是程序启动时就分配在只读数据段的,既不属于栈内存,也不是malloc分配的堆内存。
针对你的问题:
foo函数执行结束时,栈上的指针变量string会被销毁,但它指向的字符串字面量的内存不会自动释放- 这块内存的生命周期和整个程序一致,只有当程序退出时才会被操作系统回收
- 注意:你绝对不能用
free()去释放这个字符串字面量的内存,这么做会触发未定义行为
对比你提到的malloc场景:
malloc分配的堆内存不会随函数栈帧销毁而自动释放,必须手动调用free()- 而字符串字面量属于静态存储区的内存,不需要开发者手动管理其生命周期
内容的提问来源于stack exchange,提问作者jmsapt
相关产品推荐
相关产品推荐

