标题: C语言子函数赋值出错,请问为什么 [打印本页]

作者: guysxpf    时间: 2021-1-15 14:38
标题: C语言子函数赋值出错,请问为什么
今天调试C语言代码发生了很邪门的事情,一开始宏定义了一个数字NUM,大小1024(0x0400),作为参数传给函数。结果传给子函数之后,变量变成了0x6E36(十进制28214)。而且我把宏定义换成变量赋值,结果没有任何改变。请问这是为什么呢?

参数定义与调用




单步调试发现错误

作者: 心有浮生    时间: 2021-1-15 16:04
全局查找NUM,估计有重名的吧
作者: 我一岁    时间: 2021-1-15 16:09
定义一个静态的参数呢,或许是最快的debug方式
作者: xstong    时间: 2021-1-15 16:43
再执行一步,看呢!  监控窗口数值,可能没更新!
如果确定是传入数值异常,你可以在定义部分等位置加点其它不被优化掉的定义、代码再试试,看看传入值是否正常了!
作者: munuc_w    时间: 2021-1-16 15:56
走到28行再看结果,现在的位置变量还没有刷新,你看到的是以前的数据。
作者: suncat0504    时间: 2021-1-16 19:27
以我的经验,怀疑Median_Filter的参数传递时发生了问题。重点是第一个参数。因为是指针型的,很容易溢出到第二个参数所在的单元上去。所以建议你把参数顺序对调一下。把argc放在前面,argv放在后面试试。
指针型的参数,在没遇到'\0'结束符号之前,会一直持续下去。
另外你可以试试,第一个参数在传递之前,务必进行初始化,保证存在结束符'\0'。在赋值时,也要保证不覆盖掉结束符'\0'。对int型的,因为一个数据占两个单元,这时结束符'\0'务必要保证在有效数据后。如下例如某个int型指针指向的数据:0x10 0x00 0x00,这里的第一个0x00是不能作为结束符的,因为Int型数据占两个字节,所以第一个0x00是数据的一部分(低八位数据)。第二个0x00才是有效的结束符。
作者: wojiaoguogai    时间: 2021-1-17 21:47
1.重名 2.数据类型溢出
作者: 罗程峰8200    时间: 2021-1-17 23:02
函数内数据类型与输入不一致,运算错误,好好检查




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1