循环问题啊.紧急求救啊~各位大哥!(100分)

  • 主题发起人 主题发起人 huying
  • 开始时间 开始时间
H

huying

Unregistered / Unconfirmed
GUEST, unregistred user!
小地的垃圾代码.请大家先别骂小弟.程序的过程应该是没有问题,我前面注释掉的也没有问题,现在主要是进后面的循环,当(ByteArr[kuai*16384+15])= $ff 不成立.后面的循环一次后就死了.不知道为什么.救命啊!
procedure tform1.zhuan_huan();
var
f1:file;
targetcount,luyin:integer;
fffover,datalength_boo,fenkuai,fkuai:boolean;
kuer,kuer1,i,k:integer;
datalength:integer;
begin
luyin:=0;kuer1:=0;
fenkuai:=false; fkuai:=false;kuer:=0;
if (ByteArr[kuai*16384+2])<> $ff then
begin
while not fenkuai do
begin
if (ByteArr[kuai*16384+15])= $ff then
begin
if (ByteArr[kuai*16384-16384+15])= $ff then
begin
{ timedelay(5);
time_head_1();
ffcount:=0;
fffover:=false;
while not fffover do
begin
if ((ByteArr[(kuai+1)*16384-ffcount-1]) = $ff) then
begin
inc(ffcount);
end
else
fffover:=true;
end;
if fffover then
begin
setlength(Bin,16312-ffcount);
for i:=0 to (16311-ffcount) do
begin
Bin:=ByteArr[kuai*16384+i+72];
end;
dsq:='d:/WavFile/'+riqi+shijian+'.bin';
assignfile(f1,dsq);
rewrite(f1,1);
blockwrite(f1,Bin[0],16312-ffcount,targetcount);
closefile(f1);
setlength(Bin,0);
end; }
fenkuai:=true;
inc(kuai);
end
else
begin
timedelay(5);
ffcount:=0;
datalength_boo:=false;
while not datalength_boo do
begin
if ((ByteArr[(kuai+1)*16384-ffcount-1]) = $ff) then
inc(ffcount)
else
datalength_boo:=true;
end;

if ((ByteArr[kuai*16384+12])= 0) then
datalength:=16312-ffcount
else
datalength:=16344-ffcount;
data:=data+datalength;

if aaa=false then
begin
kuai:=kuai-kuer;
setlength(Bin,data+16);
fkuai:=false;
while not fkuai do
begin
if (ByteArr[(kuai)*16384+15])= $ff then
begin
if (ByteArr[(kuai)*16384-16438+15])<> $ff then
begin
datalength_boo:=false;
ffcount:=0;
while not datalength_boo do
begin
if ((ByteArr[(kuai+1)*16384-ffcount-1]) = $ff) then
inc(ffcount)
else
datalength_boo:=true;
end;
for i:=0 to 16343-ffcount do
Bin[kuer1+i]:=ByteArr[(kuai)*16384+i+40];
kuer1:=kuer1+16344-ffcount;
dsq:='d:/WavFile/'+riqi+shijian+'.bin';
assignfile(f1,dsq);
rewrite(f1,1);
blockwrite(f1,Bin[0],data,targetcount);
closefile(f1);
setlength(Bin,0);
inc(kuai);
kuer:=0;
kuer1:=0;
fkuai:=true;
fenkuai:=true;
aaa:=true;
data:=0;
//exit;
end;
end
else
begin
datalength_boo:=false;
ffcount:=0;
while not datalength_boo do
begin
if ((ByteArr[(kuai+1)*16384-ffcount-1]) = $ff) then
inc(ffcount)
else
datalength_boo:=true;
end;
if (ByteArr[(kuai)*16384+12])= $00 then
begin
time_head_1();
for i:=0 to 16311-ffcount do
Bin[kuer1+i]:=ByteArr[(kuai)*16384+i+72];
kuer1:=kuer1+16312-ffcount;
inc(kuai);
end
else
begin
for i:=0 to 16343-ffcount do
Bin[kuer1+i]:=ByteArr[(kuai)*16384+i+40];
kuer1:=kuer1+16344-ffcount;
inc(kuai);
end;
end;
end;
end;
fenkuai:=true;
end;
end
else
begin
aaa:=false;
ffcount:=0;
datalength:=0;
datalength_boo:=false;
while not datalength_boo do
begin
if ((ByteArr[(kuai+1)*16384-ffcount-1]) = $ff) then
inc(ffcount)
else
datalength_boo:=true
end;

if (ByteArr[kuai*16384+12])=$00 then
datalength:=16312-ffcount
else
datalength:=16344-ffcount;

data:=data+datalength;
inc(kuai);
inc(kuer);
end;
end;
end
else
begin
ffover:=true;
end;
timedelay(5);

if (ffover=false) then zhuan_huan();

end;
 
啊,太长也,看来这100分有些烫手啊
 
想帮你看一下,可是太费劲了,
 
排版什么的可能乱了点.内容都是没什么技术含量的.小弟实在是比较急.麻烦各位了.请大家帮忙啊!
 
大家觉得累了点,小弟把全部分都给了.请大家帮忙!
 
我觉得你还是设置断点自己调试一下吧
 
如果你是在跟踪时出错,那么找到出错行再来提问题;
如果你是运行时死机而来问的,那么估计不是死机,而是循环次数太多了,造成假死;或者干脆是死循环;
比如这样的循环:
while not datalength_boo do
begin
if ((ByteArr[(kuai + 1) * 16384 - ffcount - 1]) = $FF) then
inc(ffcount)
else
datalength_boo := true;
end;
首先,你的ByteArr[]数组有多大?(kuai + 1) * 16384 这么大?
况且后来还inc(kuai);??你就不会数组下标越界吗?
其次,在这个循环中要循环多少次?至少几万次吧?还不止这一段,你的代码中有好几段呢!!
 
我的字节有33546240,太大了吗?它是读入个32m的BIN文件得到的.里面数据是有规律的.所以.下标是没有问题的.当kuai<50shi 4程序能正常.要是大于50就出现你说的"假死"吧!但是我如果单独执行我注释掉的.其他的只是给个过程不处理数据的话.整个程序跑起来又没有问题!
 
看的好累呀
 
长啊.帮忙顶
 
多人接受答案了。
 
后退
顶部