由于工作的需要,写了一个程序,但是写完了以后出现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;

解决方案 »

  1.   

    默认Delphi栈大小为$100000
    有栈大小异常的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都会把函数和参数压栈,如果次数一多,就会堆栈溢出
      

  2.   

      没有细看程序,但应该是堆栈溢出造成的。
    我觉得既是重新设置 MAXSTACKSIZE 的大小不能解决问题,
    堆栈溢出一般都是死循环造成的,你可以仔细检查一下循环条件。如有问题,继续讨论!
      

  3.   

    没有死循环,应该是递归太多了,我把P_Number设置小一点就过了.
    但是实际操作的时候需要的P_Number很大,故我改了一下算法,不用递归了