我在一个程序中用NEW(),DISPOSE()来动态的读取数据和释放内存,但是有时程序会自动关闭,并报“程序发生非法错误,并强制关闭”的错误。有人说是内存读取错误的原因,静态的创建一个内存池并从里面读取数据可以解决问题,但没有告诉我如何静态的创建一个内存池。特此请教各位高手如何创建一个内存池并从中读取数据和如何释放?谢谢!!!

解决方案 »

  1.   

    var
      ms: TMemoryStream;
      buf: array [0..255] of Char;
    begin
      buf := '1234567880984544444';
      ms := TMemoryStream.Create;
      try
        ms.SetSize(1024);
        ms.Write(buf, SizeOf(buf));
        ms.Position := 5;
        ms.Read(buf, 13);
        ShowMessage(buf);
      except
        ms.Free;
      end;
    end;
      

  2.   

    我的BUF的位置是一个自己定义的结构,该如何实现
      

  3.   

    type
      MyRecord = record
        name: array [0..5] of Char;
        age: Integer;
      end;var
      ms: TMemoryStream;
      buf: array [0..25] of MyRecord;
      ReadBuf: MyRecord;
      i: Integer;
      name: String;
    begin
      FillChar(ReadBuf, SizeOf(MyRecord), 0);
      FillChar(buf, SizeOf(buf), 0);
      for i := 0 to 25 do
      begin
        name :=  'name' + IntToStr(i);
        StrMove(@buf[i].name[0], PChar(name), Length(name));
        buf[i].age := 5 + i;
      end;
      ms := TMemoryStream.Create;
      try
        ms.SetSize(SizeOf(buf));
        ms.Write(buf, SizeOf(buf));
        ms.Position := SizeOf(MyRecord) * 5;
        ms.Read(ReadBuf, SizeOf(MyRecord));
        ShowMessage(ReadBuf.name);
      except
        ms.Free;
      end;
    end;