1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近发现个问题,有个函数里边调用别的函数后老出错,查找程序没有问题,经过仿真后发现在调用一个子函数后有几个局部变量值会发生改变,再分析原因,发现本函数的局部变量和子函数的局部变量有地址重合的,子函数中对局部变量进行了操作,返回后相应的局部变量值发生了改变,所以出错,我现在把函数的所有局部变量全部设置为了静态变量,但是这只能是个权益之计,而且这样解决不知道会不会造成别的问题,正常来说C编译器应该能够避免这种现象的发生,我怀疑是编译器设置有问题了,但是找不到地方,有哪位大神能给帮帮忙呗。
|
|
相关推荐
1个回答
|
|
从您的描述来看,这个问题可能是由于以下几个原因导致的:
1. **栈溢出**:如果程序中的函数调用层次过深,或者局部变量占用的栈空间过大,可能会导致栈溢出,从而影响到其他函数的局部变量。 2. **编译器优化**:编译器在优化代码时,可能会对局部变量的存储方式进行调整,导致原本不重合的局部变量地址发生了重合。 3. **内存泄漏**:如果程序中存在内存泄漏问题,可能会导致局部变量的地址被其他数据覆盖,从而影响其值。 为了解决这个问题,您可以尝试以下方法: 1. **检查代码**:仔细检查代码,确保没有逻辑错误或者变量使用错误。同时,检查函数调用的层次,避免过深的调用。 2. **增加栈空间**:如果怀疑是栈溢出导致的,可以尝试增加程序的栈空间。在XC8编译器中,可以通过设置`--heap-size`参数来调整堆空间大小。 3. **关闭编译器优化**:尝试关闭编译器的优化功能,看看问题是否得到解决。在XC8编译器中,可以使用`-O0`参数来关闭优化。 4. **使用静态变量**:虽然您已经尝试了使用静态变量,但这确实不是一个长久之计。静态变量可能会导致变量的生命周期延长,从而影响程序的运行效率。建议您在解决问题后,逐步将静态变量替换为局部变量。 5. **使用调试工具**:使用调试工具(如XC8的IDE)来逐步跟踪程序的执行过程,观察局部变量的值变化情况,以便找到问题的根本原因。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
OptiSystem与OptiBPM的联合使用:MMI耦合器性能评估
615 浏览 0 评论
611 浏览 0 评论
OptiSystem与OptiSPICE的联合使用:收发机电路的眼图分析
465 浏览 0 评论
603 浏览 0 评论
上位机如何实现发送参数给单片机,单片机保存接收的参数重复运行指定的功能
1910 浏览 1 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 10:18 , Processed in 0.348624 second(s), Total 40, Slave 34 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号