找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 2241 | 评论数: 7 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-1-15 14:38

正文摘要:

今天调试C语言代码发生了很邪门的事情,一开始宏定义了一个数字NUM,大小1024(0x0400),作为参数传给函数。结果传给子函数之后,变量变成了0x6E36(十进制28214)。而且我把宏定义换成变量赋值,结果没有任何改变 ...

回复

ID:89217 发表于 2021-1-17 23:02
函数内数据类型与输入不一致,运算错误,好好检查
ID:415064 发表于 2021-1-17 21:47
1.重名 2.数据类型溢出
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:752974 发表于 2021-1-16 15:56
走到28行再看结果,现在的位置变量还没有刷新,你看到的是以前的数据。
ID:429003 发表于 2021-1-15 16:43
再执行一步,看呢!  监控窗口数值,可能没更新!
如果确定是传入数值异常,你可以在定义部分等位置加点其它不被优化掉的定义、代码再试试,看看传入值是否正常了!

评分

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

查看全部评分

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

评分

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

查看全部评分

ID:654028 发表于 2021-1-15 16:04
全局查找NUM,估计有重名的吧

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

Powered by 单片机教程网

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