局部变量为什么没有释放?

玉怀一捧雪 2015-01-10 09:23:27

u8 *Analy_String(u8 da)
{
u8 table[4];
table[0]=da/100+48;
table[1]=da%100/10+48;
table[2]=da%10+48;
table[3]='\0';
return &table[0];
}
Write_String(0xC0,Analy_String(i));

用protues仿真,数据错误;把数据设置成全局后,数据正确;
但是我在单片机测试,发现函数内定义数组返回地址,读取数据是正确的;不是说局部变量都是保存在栈里的吗?这是怎么回事。
...全文
304 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mangoalx 2015-01-12
内存虽然释放了,但是内容并没有变,因为还没有被别处使用。 别纠结这个,知道不能这么用就完了,程序变大以后肯定出问题
回复
玉怀一捧雪 2015-01-12
利用串口看了下数据

void Send_String(uint8 *p)
{
	while(*p != '\0')
	{
		Send_Byte(*p++);
	}
}
u8 *Analy_String(u8 da)
{
    u8 table[4];   
    table[0]=da/100+48;
    table[1]=da%100/10+48;
    table[2]=da%10+48;
    table[3]='\0';
    return &table[0];
}
main()
{
    u8 i=0;
    u8 *p; 
    while(1)
    {
    p=Analy_String(i);
    i+=1;
    Send_String(p);
   }
}
串口助手上面得到的数据是正确的。
回复
woshi_ziyu 2015-01-10
局部变量已经被释放了 该内存地址可以被分配了 但是地址内存的值并没有改变 仍然是上次分配地址空间的值 楼主可以进行测试一下 temp = Analy_String(i) ;// ;//申请 占用内存栈的局部变量 Write_String(0xC0,temp);
回复
worldy 2015-01-10
单片机由于内存有限,局部变量没有放在栈上
回复
相关推荐
发帖
单片机/工控
创建于2007-09-28

2.6w+

社区成员

硬件/嵌入开发 单片机/工控
申请成为版主
帖子事件
创建了帖子
2015-01-10 09:23
社区公告
暂无公告