完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近发现个问题,有个函数里边调用别的函数后老出错,查找程序没有问题,经过仿真后发现在调用一个子函数后有几个局部变量值会发生改变,再分析原因,发现本函数的局部变量和子函数的局部变量有地址重合的,在子函数中对局部变量进行操作,返回后相应的局部变量值发生了改变,所以出错,我现在把函数的所有局部变量全部设置为了静态变量,但是这只能是个权益之计,正常来说C编译器应该能够避免这种现象的发生,我怀疑是编译器设置有问题了,但是找不到地方,有哪位大神能给帮帮忙呗。 |
|
相关推荐
1个回答
|
|
这个问题可能是由于编译器的优化设置导致的。在某些情况下,编译器可能会尝试优化代码以提高性能,这可能会导致局部变量的地址重合。以下是一些建议来解决这个问题:
1. 检查编译器的优化设置:确保编译器没有启用过于激进的优化选项。在 XC8 编译器中,你可以尝试降低优化级别,例如从 -O2 改为 -O1 或 -O0。 2. 使用不同的编译器:尝试使用其他编译器,如 GCC 或 Clang,看看问题是否仍然存在。 3. 避免使用静态变量:虽然将所有局部变量设置为静态变量可以避免地址重合的问题,但这并不是一个好的解决方案,因为它可能导致其他问题,如内存泄漏。 4. 重新组织代码:尝试重新组织你的代码,以减少局部变量之间的地址重合。例如,你可以尝试将一些局部变量移到不同的函数中,或者使用指针来访问这些变量。 5. 使用调试工具:使用调试工具,如 GDB 或 LLDB,来检查变量的地址和值。这可以帮助你更好地了解问题的原因。 6. 检查代码风格:确保你的代码风格遵循了 C 语言的最佳实践,这有助于避免潜在的问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
5212 浏览 9 评论
2019 浏览 8 评论
1944 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3192 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2246 浏览 5 评论
760浏览 1评论
647浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
567浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
659浏览 0评论
557浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-12 09:38 , Processed in 2.728392 second(s), Total 76, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号