内存陷阱

char *Dosomething()

{

    char i[32*1024];

    memset(i,0,32*1024);

    ........

   return i;

两个重大问题:

1. 临时变量通过堆栈实现的(M51除外),太大的临时变量数组会冲掉堆栈

2. 返回堆栈中的地址是非常危险地。因为堆栈中的值在退出函数体后无法确定 

关于临时变量:

(1)不要对临时变量作地址操作。因为你不知道编译器是否讲这个变量映射到寄存器。

(2)在函数返回的时候,不要返回临时变量的地址,或临时指针变量,因为堆栈中的内容是不确定的(出了这个函数,存放在堆栈的局部变量就没有意义了)

(3)不要申请太大的临时变量数组,防止堆栈溢出。

一见钟情 发表于09-08 13:59 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

一见钟情
一见钟情(大校)
金币:1529个|学分:3659个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号