由于工作的需要,写了一个程序,但是写完了以后出现Stack overflow的错误,请各位大虾帮忙解决一下.
相关代码如下,程序在执行到GetBefore(s_order,i1,p_t,P_Number,P_Number,str3);的时候报的错.type TStack=Record top:integer;
ntop:array[1..P_Number] of integer;
element:array[1..P_Number] of string; End; for i1:=1 to P_Number do
begin
if p_t[i1][1] <> '-1' then
begin if p_t[i1][2] = '-1' then str3:=str3+p_t[i1][1]+'||END'
else
begin
Push(s_order,p_t[i1][1],0);
GetBefore(s_order,i1,p_t,P_Number,P_Number,str3); Pop(s_order);
end;
end; end;
PROCEDURE GetBefore(VAR s:TStack;x:integer;t:MUTT;n:integer;m:integer;var str3:string);
VAR
j,i:integer;
tf:Boolean;
y:integer;
Gstr:string;
BEGIN
y:=1; WHILE (t[x,y+1] <> '-1') and (y<=m) DO
begin
Push(s,t[x,y+1],n);
tf:=false;
i:=1;
WHILE (tf = false) and (i<m+1) DO
begin
if t[i,1]=t[x,y+1] then
begin
tf:=true;
GetBefore(s,i,t,n,m,str3);
end;
i:=i+1;
end; Gstr:='';
for j:=1 to S.top do
begin
Gstr:=Gstr+S.element[j];
end; if Gstr<>copy(str3,1,length(gstr)) then str3:=Gstr+'||END'+str3;
Pop(s); y:=y+1; end;
END;
解决方案 »
- 急问。SQL语句~
- delphi能开发出SSH功能的客户端软件吗?【征集】
- 未看到的控件释放出错
- 手机短信问题
- 用ado连接access,如何将一个access文件的表全部复制到另一个access文件中?
- 本人以前写数据库项目从没用过存储过程,现在想转用存储过程,突有一"奇想".....
- 想写个程序,让它开机后一直在后台运行,程序本身用来接受一些命令就行,有没有什么方法让程序占资源少点!
- 怎么样,将一个文件中的数据按字节从第2060个字节开始读取,把他存在一个字符数组中。。。
- 按钮字体为什么不变成黄色?附调试代码~
- 关于加密的,急!!!
- 求助:TQuickRep的使用!将投240分
- apihook的问题
有栈大小异常的Bug:
var
i : Integer;
s : array[0..4100] of string[255];
begin
for i := 0 to 4100 - 1 do begin
s[i] := StringOfChar('A', 255);
end;
end;修改{$MAXSTACKSIZE}
var
i : Integer;
s : array[0..4100] of string[255];
begin
{$MAXSTACKSIZE $1000000}
for i := 0 to 4100 - 1 do begin
s[i] := StringOfChar('A', 255);
end;
end;但,感觉你的程序是递归出了问题,每次递归,Delphi都会把函数和参数压栈,如果次数一多,就会堆栈溢出
我觉得既是重新设置 MAXSTACKSIZE 的大小不能解决问题,
堆栈溢出一般都是死循环造成的,你可以仔细检查一下循环条件。如有问题,继续讨论!
但是实际操作的时候需要的P_Number很大,故我改了一下算法,不用递归了