[PIC®/AVR®/dsPIC®产品] XC8调用函数后局域变量值被改变

[复制链接]
2022|11
 楼主| ayfalcon 发表于 2024-4-30 15:35 | 显示全部楼层 |阅读模式
最近发现个问题,有个函数里边调用别的函数后老出错,查找程序没有问题,经过仿真后发现在调用一个子函数后有几个局部变量值会发生改变,再分析原因,发现本函数的局部变量和子函数的局部变量有地址重合的,在子函数中对局部变量进行操作,返回后相应的局部变量值发生了改变,所以出错,我现在把函数的所有局部变量全部设置为了静态变量,但是这只能是个权益之计,正常来说C编译器应该能够避免这种现象的发生,我怀疑是编译器设置有问题了,但是找不到地方,有哪位大神能给帮帮忙呗。
chenjun89 发表于 2024-5-5 20:18 来自手机 | 显示全部楼层
变量没有正确使用的bug
weifeng90 发表于 2024-5-6 07:54 来自手机 | 显示全部楼层
重新编译后看看结果是否一样
 楼主| ayfalcon 发表于 2024-5-6 09:49 | 显示全部楼层
chenjun89 发表于 2024-5-5 20:18
变量没有正确使用的bug

这个应该怎么处理呀,您遇到过吗?
 楼主| ayfalcon 发表于 2024-5-6 09:50 | 显示全部楼层
weifeng90 发表于 2024-5-6 07:54
重新编译后看看结果是否一样

重新编译也不行,我把XC8版本换成最新的了也不行。
 楼主| ayfalcon 发表于 2024-5-6 09:51 | 显示全部楼层
chenjun89 发表于 2024-5-5 20:18
变量没有正确使用的bug

现在就是不知道是我程序那有问题还是什么地方设置有问题。
lb1057907736 发表于 2024-5-6 10:24 来自手机 | 显示全部楼层
制作一个能复现问题的例子工程发上来,大家帮你看看。你想解决问题,即使你找美国原厂的技术支持,也要求你这么做。我可以肯定是你程序的问题。

评论

+1  发表于 2024-5-7 17:18
wutaosamuel 发表于 2024-5-8 10:31 | 显示全部楼层
给个例子
 楼主| ayfalcon 发表于 2024-5-8 23:43 | 显示全部楼层
lb1057907736 发表于 2024-5-6 10:24
制作一个能复现问题的例子工程发上来,大家帮你看看。你想解决问题,即使你找美国原厂的技术支持,也要求你 ...

复制不出来,我这两天反复查看程序,没有问题,编译也没有错误,即使相关的警告也么有
旧年胶片 发表于 2025-9-20 16:37 | 显示全部楼层
XC8 中调用函数后局部变量值被改,多因栈溢出或内存冲突。XC8 默认将局部变量存在栈中,若函数嵌套深、局部变量大,易致栈溢出覆盖其他变量。可加大栈空间,或用 static 关键字将局部变量存静态区,也需检查指针操作是否越界,避免误改内存。
一点点晚风 发表于 2025-9-22 16:36 | 显示全部楼层
XC8 中调用函数后局部变量值被改,多因内存管理问题。可能是函数内数组越界,覆盖了栈上的局部变量;或指针操作错误,修改了局部变量地址;也可能是函数参数传递不当,如指针意外修改。需检查数组边界、指针指向及参数传递,确保内存操作合法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

58

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部