#include<stdio.h> #include<string.h> char* test(){ char str[10]; char* strp = str; strcpy(strp,"test"); printf("%p\n",strp); return strp; } int main(){ char *str; str = test(); printf("%p,%s\n",str,str); str[0] = 'l'; printf("%s\n",str); return 0; }
代码如上,test函数返回了一个内存地址,而这段内存在test函数执行完毕之后就应该被“销毁”,但实际上在main函数中去读取这个内存,发现内容还在,并且还能对其修改。
我想问的是,这段内存中的内容是否是安全的?也就是其他函数在申请空间的时候会不会占用这里的内存,导致这块内存中的内容被改变
看来LZ还的多了解下C的内存定义
char* test() 返回str[10], str[10]是test的栈内存, 栈内存的工作范围就是当前函数即test,退出该函数后就不安全.
str[0] ='1' ; 对test()返回的栈内存进行操作那就更不安全了
LZ所说内存可用是正常的, 在嵌入式上出问题的概率不高,在PC上出现概率要高(内存管理机制决定),但都可能存在以下问题:
- 将别的有效数据删除了(导致系统数据错误或函数无法正常返回)
- 写入的数据被其他操作覆盖了
######不安全的,这块内存可能在任何时候被重新使用,结果没法预料。######举个例子,大官视察民情,JC封路,路上留下了大官的车轮胎印子。
大官走后,路解封.
但是路上的大官留下的轮胎印子还在,你能看到。你的小破车过去,就把大官留下来的轮胎印子改变了。
明白了?
######哈哈 有意思!######当你代码往下运行,调用别的函数,会覆盖这段栈内存,你再试试修改它######不安全,会出现不可预知的问题。。。######错误的用法就是不安全的######举个例子,大官视察民情,JC封路,路上留下了大官的车轮胎印子。
大官走后,路解封.
但是路上的大官留下的轮胎印子还在,你能看到。你的小破车过去,就把大官留下来的轮胎印子改变了。
明白了?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。