真见鬼了!数组变量里面的值自动变大,百思不能解,莫非delphi7有问题(150分)

  • 主题发起人 主题发起人 wenqy
  • 开始时间 开始时间
W

wenqy

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序出现问题,跟踪时发现给双下标数组hd[]赋值时,单下标数组gs[]的值没有赋值语句竟然由0突然变大。百思不能解!
if (gs[r]=0)and(gs[r+3]=0) then
begin
hd[gs[r+1],r+1]:=true
hd[gs[r+2],r+2]:=true
//见鬼
...
后来,只好想法绕过去,我编了两个过程,另设了个单下标数组jggs[mmm],在问题语句前先把出问题的几个值导出,过了这句,再把它还原回去,万没想到,跟踪时发现新设的单下标数组jggs[mmm]又自己变大。
实在没法,请高人指点!

if (gs[r]=0)and(gs[r+3]=0) then
begin
JgqGC
//见鬼前
hd[gs[r+1],r+1]:=true
hd[gs[r+2],r+2]:=true
//见鬼
JghGC
//见鬼后

procedure TForm1.JgqGC
//见鬼前
begin
for mmm:=14 to 19 do //见鬼,不赋值竟然由0突然变大。恐怕是系统或软件问题!
jggs[mmm]:=gs[mmm];
end;

procedure TForm1.JghGC
//见鬼
begin
for mmm:=14 to 19 do //见鬼,不赋值竟然由0突然变大。恐怕是系统或软件问题!
if jggs[mmm]>4 then
gs[mmm]:=0
else gs[mmm]:=jggs[mmm];
end;
 
呵呵,估计你是一个数组初始化问题,没有初始化的元素,其值是随机的,确实可能是一个很大的数字
 
一般是由于你操作其他变量的时候下标越界导致将本变量修改
 
我也遇到过有时候没法想通的问题,和你的类似,比如循环变量突然不对等等。
你使用临时变量试试看?
var temp:integer;
if (gs[r]=0)and(gs[r+3]=0) then
begin
temp:=gs[r+1];
hd[temp,r+1]:=true
hd[temp+1,r+2]:=true
//见鬼
 
to dreamfly1024, 在这句前面已赋值
for kk:=14 to 19 do //见鬼
jggs[kk]:=0;
to wanderld 操作其他的时候下标越界导致将本变量修改, 说的有道理,不过这3个变量不可能越界,别的没查到!
to zywcd, 我再试临时变量,可能性也不大!
不过,此问题有规律,变大不是随机的,如突然由0变大为256,65536等
 
仅仅靠你写出来的那一点代码,我看不出什么问题.没遇到过这样的问题,发现数据在意料之外的情况最后都证明是我程序逻辑错误造成的.zywcd说得循环变量值不对的一种情况我遇到过,比如
var
n,i:integer;

begin
for i:=255 to 265 do inc(n);
...
如果开了编译优化,你会发现 i得值实际是从0到10 或10 到0在变化,而不是255到265 .类似得优化还不少,不过都不影响最后程序得运行
 
编译优化在哪里操作的?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
746
SUNSTONE的Delphi笔记
S
后退
顶部