找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1925|回复: 7
收起左侧

C语言子函数赋值出错,请问为什么

[复制链接]
ID:224104 发表于 2021-1-15 14:38 | 显示全部楼层 |阅读模式
今天调试C语言代码发生了很邪门的事情,一开始宏定义了一个数字NUM,大小1024(0x0400),作为参数传给函数。结果传给子函数之后,变量变成了0x6E36(十进制28214)。而且我把宏定义换成变量赋值,结果没有任何改变。请问这是为什么呢?
1.png
参数定义与调用

2.png


单步调试发现错误
回复

使用道具 举报

ID:654028 发表于 2021-1-15 16:04 | 显示全部楼层
全局查找NUM,估计有重名的吧
回复

使用道具 举报

ID:196216 发表于 2021-1-15 16:09 | 显示全部楼层
定义一个静态的参数呢,或许是最快的debug方式

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:429003 发表于 2021-1-15 16:43 | 显示全部楼层
再执行一步,看呢!  监控窗口数值,可能没更新!
如果确定是传入数值异常,你可以在定义部分等位置加点其它不被优化掉的定义、代码再试试,看看传入值是否正常了!

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:752974 发表于 2021-1-16 15:56 | 显示全部楼层
走到28行再看结果,现在的位置变量还没有刷新,你看到的是以前的数据。
回复

使用道具 举报

ID:517466 发表于 2021-1-16 19:27 | 显示全部楼层
以我的经验,怀疑Median_Filter的参数传递时发生了问题。重点是第一个参数。因为是指针型的,很容易溢出到第二个参数所在的单元上去。所以建议你把参数顺序对调一下。把argc放在前面,argv放在后面试试。
指针型的参数,在没遇到'\0'结束符号之前,会一直持续下去。
另外你可以试试,第一个参数在传递之前,务必进行初始化,保证存在结束符'\0'。在赋值时,也要保证不覆盖掉结束符'\0'。对int型的,因为一个数据占两个单元,这时结束符'\0'务必要保证在有效数据后。如下例如某个int型指针指向的数据:0x10 0x00 0x00,这里的第一个0x00是不能作为结束符的,因为Int型数据占两个字节,所以第一个0x00是数据的一部分(低八位数据)。第二个0x00才是有效的结束符。
回复

使用道具 举报

ID:415064 发表于 2021-1-17 21:47 | 显示全部楼层
1.重名 2.数据类型溢出
回复

使用道具 举报

ID:89217 发表于 2021-1-17 23:02 | 显示全部楼层
函数内数据类型与输入不一致,运算错误,好好检查
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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