知道我为什么这么晚还不睡?此刻心情只有写程序的兄弟们才能体会!(30分)

  • 主题发起人 坏蛋是我
  • 开始时间

坏蛋是我

Unregistered / Unconfirmed
GUEST, unregistred user!
现在是北京时间2002-12-18 3:20
我已经快30个小时没合眼了!
为了抓一个BUG!
老板像衰人一样在一直旁边催着,
这一天一夜来的心情真是一言难尽!
我自定义了一套数据库格式,但是每当数据追加到一定程度,
存储区某些数据块便被破坏掉,但是索引区没问题!
设计有问题?代码有问题?数据有问题?
面对着几千行的代码,将近20G的数据,我的心情极度沮丧!不知从何下手!
只有一招,排除吧!
。。。设计没问题!
。。。数据没问题!
。。。追加数据...PASS
。。。
。。。读取数据...PASS
。。。
。。。追加数据...PASS
。。。
。。。读取数据...PASS
。。。
。。。
。。。代码好像也没问题,存储区追加到大概快到80%还没有问题!
。。。PASS 80% -----OVER! MY GOD!
。。。
。。。花费5,6个小时。。。。。
终于,原来记录数据结构长度定义错误(应该是96BYTES,我写成88BYTES)!
!@#$%$#^@$#&^%$&*^(%(&^*(&^%$@#%#@^$#^---晕倒10分钟!
不好意思问一下,为什么DELPHI里面记录的长度与手工计算的不一样呢?
我经常碰到记录里面的INTEGER类型变量的长度为 8 BYTES的情况!

 
身体是革命的本钱。
过30分钟我就要睡了...
 
OK,我也得去睡了!楼上两位,好梦。[:)]
 
有没有让人高兴的事儿说一下,烦事已经听多了,[:)][:)][:)]
 
同情,问题是这样的。
Delphi会做数据对齐,(其它编译器也会做),
在 Project 菜单, options...(****+Ctrl+F11) 项.
Compiler 页, Record Field alignment 处可设置,默认为 8。
建议不要自己计算记录长度,而是使用sizeof运算符,
这样编译器会在编译时,将sizeof替换为准确地长度数值。
或有特殊要求,不希望自动对齐的可以用 pack 修饰符。
 
谢谢!楼上的兄弟什么烦人的事说来听听!
 
integer本来就不是固定为4个字节的,与编译器和操作系统有关,与硬件当然也有关系.
 
Delphi在做数据对齐的时候就取了他默认的类型长度。
你在定义结构,记录的时候好象加{$A-}
可以取消数据对齐
 
整型类型的字节大小取决于你所使用的CPU和操作系统。在16位的Windows中,整型变量占两个字节,在32位的Windows中,整型变量占4个字节。因此,在两个环境中编译的Range程序会得到不同的结果。
如果你的程序对整数类型的字节大小没有特殊要求,Integer 类型在不同版本中的差异并不是个大问题。如果你在一个版本中保存了一个整数,那么在另一个版本中取出这个整数时可能会遇到一些问题,这种情况下,你应该采用平台无关的数据类型如 LongInt 或 SmallInt。对于数学计算或非特殊的代码中,你最好的选择是坚持使用平台相应的标准整型,这就是说,使用CPU最喜欢的整型类型。当处理整数时,Integer 应是你的首选,不到迫不得已最好不要采用其他的整型类型。
--------delphi精要上如是说
不要长时间工作,效率不一定高,而且,对身体伤害太大,可能你现在没有感觉,过了30就觉得不行了
 
谢谢楼上的兄弟,不过看你的回复累死了:)那么的长!我的眼珠子从最走边转到最右边,
差点没掉出来:)
 
睡醒了?
 
顶部