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

淘帖
5140