procedure TFrmMain.Button10Click(Sender: TObject);
var
  buffer: array[0..1048575] of char;
begin
  FillChar(buffer, SizeOf(Buffer), 0);
  buflen := SizeOf(buffer) - 1;
end;栈溢出问题怎么解决?

解决方案 »

  1.   

    改为在堆里面分配:procedure TForm1.Button1Click(Sender: TObject);
    var
      buffer: array of char;
      buflen: Integer;
    begin
      SetLength(buffer, 1048575);
      FillChar(buffer, High(Buffer), 0);     //buffer实际上是个指针, 所以SizeOf(Buffer)总是4
      buflen := SizeOf(buffer) - 1;
    end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      buffer: array of char;
      buflen: Integer;
    begin
      SetLength(buffer, 1048575);
      FillChar(buffer, High(Buffer), 0);     //buffer实际上是个指针, 所以SizeOf(Buffer)总是4
      buflen := High(buffer) - 1;
      ......
      buffer := nil;               //回收分配的空间
    end;
      

  3.   

    to:jadeluo(秀峰) 
    还是一样的
      

  4.   

    刚才的有处错误, 修改一下:
    var
      buffer: array of char;
      buflen: Integer;
    begin
      SetLength(buffer, 1048575);
      FillChar(buffer[0], High(Buffer), 0);     //buffer实际上是个指针, 所以SizeOf(Buffer)总是4
      buflen := High(buffer) - 1;
      buffer := nil;               //回收分配的空间
    end;
      

  5.   

    好像过程或者函数中的局部数组不能申请那么大的空间
    只能用全局变量,或者声明为动态数组,在程序运行的时候动态申请
    procedure TFrmMain.Button10Click(Sender: TObject);
    var
      buffer: array of char;
    begin
      SetLength(buffer,1048575);
      FillChar(buffer, SizeOf(Buffer), 0);
      buflen := SizeOf(buffer) - 1;
    end;
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      buffer: array of char;
      buflen: integer;
    begin
      SetLength(buffer, 1048575);
      FillChar(buffer[0], length(Buffer), 0);
      buflen := length(buffer);
      SetLength(buffer, 0);
    end;