见鬼了!变量数据自己变了

freeleo 2002-08-25 12:55:15
我单步追了半天,发现有一个变量的数据自己由0变为1,但没有任何操作改变他的值啊(不是引用/指针)
另外,我把链表保存到文件中再清空链表,结果文件里的内容全没了,而且肯定是再清空链表的时候没的。一个在硬盘,一个在内存,怎么会这样?!!!

真是”撞到鬼“了!!! 疯掉!谁能给俺个确切的解释啊?
...全文
169 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
apao 2002-08-28
  • 打赏
  • 举报
回复
关于“单步全部正常通过,完全编译执行则出错”的问题我也碰到过几次,Tommy() 说的有道理,但有时不是内存访问越界、溢出,我听到一种解释(忘了从哪听到的),说是完全编译执行时会对代码进行优化,所以执行顺序和单步执行时并不完全一样(当然这种执行顺序的改变一般对程序没有影响,但可能极少数情况下会出错)
Tommy 2002-08-28
  • 打赏
  • 举报
回复
自己调试一下,看看哪里出错了,再改就是了。

多调试一下程序,提高调试能力吧,对以后的工作很有好处的
Tommy 2002-08-28
  • 打赏
  • 举报
回复
我听到一种解释(忘了从哪听到的),说是完全编译执行时会对代码进行优化,所以执行顺序和单步执行时并不完全一样
==========================

是会这样的,如果在多线程的环境下,是要特别注意优化引起的问题。但是由优化引入的错误是不多的,发生的可能性非常小,我是没有遇到过,如果有这么大的问题,大家早就将那个编译器扔掉了:)

楼上说的在不同地方打印变量的值也是一种方法,可以缩小范围,找到出错的地方。毕竟在调试版中没有问题,release版中又不方便进行调试。
winco 2002-08-28
  • 打赏
  • 举报
回复
关注中……
echoher 2002-08-28
  • 打赏
  • 举报
回复
自己写个log函数,把那个自动变化的值给打出来,看看在哪变的
文件没保存可能是忘了colse()了
colorrain 2002-08-28
  • 打赏
  • 举报
回复
单步全部正常通过,完全编译执行则出错”的问题同意楼上所说。
变量值会改变我遇到了好多次,但最终都是因为malloc的少,使用过多引起的。你的问题应该在内存越界上.
winstarr 2002-08-27
  • 打赏
  • 举报
回复
先看代码
freeleo 2002-08-27
  • 打赏
  • 举报
回复
我怎么解决呢?
Tommy 2002-08-26
  • 打赏
  • 举报
回复
如果是VC的话,在变量上放一个内存访问断点,就可以在变量值被修改的时候中断程序,看看是谁改了你的变量了。

具体方法:
先知道变量的地址,如0012FF6C,再进入菜单上Edit-Breakpoints-Data,表达式中写变量的地址0x0012FF6C。这样就可以在变量值被修改时中断程序了。

“单步全部正常通过,完全编译执行则出错”这种问题一般就是有内存访问越界、溢出引起的。由于Debug时和Release中程序的内存布局不完全一样,运行环境也不一样,所以在一个环境中可能正常,但是在另一个环境中就不一定正常了。
stidio_zhougang 2002-08-26
  • 打赏
  • 举报
回复
我想如果那些问题都不是,那就只能是内存越界了,仔细检查有没有越界的地方
freeleo 2002-08-26
  • 打赏
  • 举报
回复
miaoweijun(苗苗) 举个例子说明一下行吗?

那个鬼变量我给绕过去了,所以以上关于“青链表时文件莫名其妙被删除”,“单步全部正常通过,完全编译执行则出错” 这两个问题更重要一些,

正在等待更详细地解释,谢谢各位的指点

lanfengjiyue 2002-08-25
  • 打赏
  • 举报
回复
说了半天,怎么给你主意啊
笑面佛_正版 2002-08-25
  • 打赏
  • 举报
回复
看看你的代码,是否用了全局变量,共享的变量,小心在DLL中的共享变量,等等其他程序可能访问改变的变量
miaoweijun 2002-08-25
  • 打赏
  • 举报
回复 1
不要怀疑撞到了鬼。这种问题我常常碰到。如果没有特别的原因。多半是你的一些其他操作把这个变量的内存冲了。你看看其他地方的付值操作吧。鬼是无辜的。
fangrk 2002-08-25
  • 打赏
  • 举报
回复
那就散分吧!:)
bigbigfans 2002-08-25
  • 打赏
  • 举报
回复
源码
freeleo 2002-08-25
  • 打赏
  • 举报
回复
代码太长了,没法贴,: Larky(睡仙) 的解释很有道理,多谢,但我怎么才能看出来呢?

duda(dd) 跟我想的一样,但我对文件流flush(),lock(),close()&open(),文件里的内容仍然被删除!!

另外,我的程序单步执行完全正确,但程序如果完全运行就出现莫名其妙的错误。

持续撞鬼中……………………

hooksea 2002-08-25
  • 打赏
  • 举报
回复
源码先
earthharp 2002-08-25
  • 打赏
  • 举报
回复
我怀疑你可能程序有地方逻辑出现了问题吧
fangrk 2002-08-25
  • 打赏
  • 举报
回复
9494
先检查你的代码
加载更多回复(16)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧