[C语言] main函数内定义的变量是在栈上吗

[复制链接]
 楼主| FAQ 发表于 2022-3-24 09:50 | 显示全部楼层 |阅读模式
有个程序调试很久一直数据异常,后来无意发现main函数内定义的变量定义在main以外后程序功能正常了。


我分析原因可能是:main函数内定义的变量属于函数局部变量,局部变量保存在栈中,main中有后续程序意外改变了栈里的值,导致这个定义在main内的变量值发生了意外改变


  1. uint32_t i;
  2. int main(void)
  3. {
  4.    
  5. ……
  6. }
  1. int main(void)
  2. {
  3.     uint32_t i;
  4. ……
  5. }


ayb_ice 发表于 2022-3-24 10:30 | 显示全部楼层
这只能说明暂时避开的错误,程序本身可能还是有问题,标准的C是通过堆栈分配局部非静态变量的,
jack821119 发表于 2022-3-24 11:30 | 显示全部楼层
程序本身有问题,堆栈的数据被意外改写了。可以将栈的大小增加,这样估计不会再出现问题了。
 楼主| FAQ 发表于 2022-3-24 11:44 | 显示全部楼层
jack821119 发表于 2022-3-24 11:30
程序本身有问题,堆栈的数据被意外改写了。可以将栈的大小增加,这样估计不会再出现问题了。 ...

RAM空间很小,我差不多都是省着用的,以至于栈的大小我也是省着设的


变量设置成全局变量以后目前暂时程序工作正常,应该不会有什么问题了
szleg 发表于 2022-3-24 19:08 | 显示全部楼层
也有可能是中断处理时,main函数的局部变量没有压入堆栈,而中断程序刚好使用了该变量的ram空间。新人瞎猜的
full_stack 发表于 2022-3-25 09:32 | 显示全部楼层
堆栈不够用,编译器会提醒你吧?
main函数定义的局部变量被改变,或许是程序有重启?
ddxx 发表于 2022-3-27 06:33 | 显示全部楼层
局部变量都入栈的,全局变量都是编译时分配的。估计栈太小。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

FAQ

233

主题

2050

帖子

9

粉丝
快速回复 返回顶部 返回列表