少年恃险若平地,独倚长剑凌清秋。这篇文章主要讲述C++的内存分配问题相关的知识,希望能为你提供帮助。
char *fun(void)
char *p="hello";
return p;
int main(void)
char *s;
s=fun();
printf("%s\\n",s);
程序运行后有什么问题呢?
一般人可能会回答说是内存错误,实际上不是,
char *p="hello";
分配在常量区,不会立即释放。
如果是如下的程序
char *fun(void)
char p[]="hello";
//注意
return p;
【C++的内存分配问题】
int main(void)
char *s;
s=fun();
printf("%s\\n",s);
很多人回答说是会出错。而我在运行过程中,却没发现出错。
原因如下:
如果对已经释放了的内存进行读写操作,那这个行为导致的结果是未定义的。
“未定义”就是说随着程序的运行情况而定,有时候这次运行你去读,没有问题,依旧能读取东西出来;但是下一次运行,未必能成功。更严重的情况就是导致崩溃。
推荐阅读
- Grafana--监控数据展示神器
- jvm专题 - 1/3GC基础
- OpenStack Train(业务组件cinder装安装)
- WTL atlApp.h
- Cilium Vxlan 跨节点通信过程
- (程序员面试题精选(02))-设计包含min函数的栈
- # yyds干货盘点 # 厉害了,Python也能使用动态链接库
- SVNX使用教程
- Python 函数进阶-递归函数