标题:
C语言子函数赋值出错,请问为什么
[打印本页]
作者:
guysxpf
时间:
2021-1-15 14:38
标题:
C语言子函数赋值出错,请问为什么
今天调试C语言代码发生了很邪门的事情,一开始宏定义了一个数字NUM,大小1024(0x0400),
作为参数传给函数
。结果传给子函数之后,变量变成了0x6E36(十进制
28214
)。而且我把宏定义换成变量赋值,结果没有任何改变。请问这是为什么呢?
1.png
(128.36 KB, 下载次数: 62)
下载附件
2021-1-15 14:33 上传
参数定义与调用
2.png
(227.79 KB, 下载次数: 71)
下载附件
2021-1-15 14:33 上传
单步调试发现错误
作者:
心有浮生
时间:
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