C语言中,变量赋值后被强制修改的原因

[复制链接]
查看11 | 回复3 | 2013-5-16 12:56:40 | 显示全部楼层 |阅读模式
重点就在while循环啊,你要贴出while循环内做了什么操作才行吧。一个死循环很容易内存溢出,那导致你参数值被修改了就很正常了。也就是你说的哪种情况,可能while内部对内存重新分配,覆盖了变量的地址的某一部分。有时候bug的出现有可能跟代码的关系并不是特别大,bug出现要记录bug出现的环境和测试的用例。在不能实现用户环境和没有测试用例的情况下,这种bug是很难找出或者重现的。所以其实,外人的帮助并不会很大,而是你要通过项目的了解,从而按逻辑来推测,可能出现的原因和位置,然后针对推测来做测试。这样儿才能有效的解决这类问题。我们做软件的时候最头疼的就是客户遇到bug,但是由于一些机密因素,我们没法拿到客户的环境,甚至测试的...
回复

使用道具 举报

千问 | 2013-5-16 12:56:40 | 显示全部楼层
不好查找原因的,大多都是由于其它变量进行了越界写操作。这些包括:(1)数组下标越界(2)字符串操作时没有注意末尾应有'\0'(3)指针没有赋初值(NULL)(4)memcp指定的拷贝长度超过了目标地址的空间大小等等,不一而足。gdb debug中的watch命令对这种问题比较有效。如果是在linu环境下,使用valgrind能较易...
回复

使用道具 举报

千问 | 2013-5-16 12:56:40 | 显示全部楼层
越界的可能性最大先用一个方法看是否是越界造成的,加一个全局变量,所有对该局部变量操作的地方都同样对全局变量做同样操作。这样看局部变量不正常时,全局变量值是否也不正常,如果是,那么就不是越界而是其他问题,比如哪里操作失误然后查看局部变量地址,看与他临界的变量有哪些,尤其是指针数组一类的,在仔细研究哪里会导致越界...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行