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

玉怀一捧雪 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仿真,数据错误;把数据设置成全局后,数据正确;
但是我在单片机测试,发现函数内定义数组返回地址,读取数据是正确的;不是说局部变量都是保存在栈里的吗?这是怎么回事。
...全文
571 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
单片机由于内存有限,局部变量没有放在栈上

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧