Błąd 'access violation at 7ca51b63'

0

Mój program kompiluje się w delphi ok lecz podczas działania wywala błąd access violation at 7ca51b63. Pokazuje się on tylko wtedy, gdy klikam ciągle wczytaj plik, a po wczytaniu usuń plik. Proszę o pomysły jak temu zapobiec. Korzystając z pewnego programu "EurekaLog" udało mi się wykryć, że błąd jest tu:
if OpenDialog1.Execute then
Screen blędu: http://img291.imageshack.us/img291/8982/bladk.png

Błąd będzie widoczny tylko po skompilowaniu programu w delphi. Na dysku .exe tylko się zamknie.

Gdyby ktoś chciał pobrać program: http://hotfile.com/dl/64887259/9787cf8/pr.rar.html

Kod wygląda następująco:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids;

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    StringGrid1: TStringGrid;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  Plik: TextFile;
  t : array of string;
  wiersz : integer;

begin
  if BitBtn1.Caption='Wczytaj plik' then
  begin
    if OpenDialog1.Execute then
      try
        begin
          wiersz := 0;
          AssignFile(Plik, OpenDialog1.FileName);
          Reset(Plik);
          while not Eof(Plik) do
          begin
            Inc(wiersz);

            if (wiersz > StringGrid1.RowCount-1) then
              StringGrid1.RowCount := StringGrid1.RowCount + 1;

            SetLength(t, wiersz+1);
            Readln(Plik, t[wiersz]);

            if (t[wiersz] = '') then
              Dec(wiersz)
            else
            begin
              StringGrid1.Cells[0, wiersz] := IntToStr(wiersz);
              StringGrid1.Cells[1, wiersz] := t[wiersz];
            end;
          end;
        end;
        CloseFile(Plik);

        BitBtn1.Caption := 'Usuń listę';
      except Application.MessageBox('Błąd przy wczytywaniu danych!', 'Wczytywanie danych', MB_OK + MB_ICONError);
      end;
  end
  else
  begin
    if Application.Messagebox('Czy chcesz usunąć listę?','Czyszenie danych' , MB_OKCancel)=IdOK then
    begin
      StringGrid1.RowCount := 2;
      StringGrid1.ColCount := 3;
      BitBtn1.Caption := 'Wczytaj plik';
    end;
  end;
end;

end.

♦♦

0

musisz to robić w tak skomplikowany sposób? nie można użyć TStringList zamiast array?

0

a jakoś nie miałem o tym pojęcia, że można tego użyć. Dzięki popróbuje, jeśli to pomoże w błędzie

1 użytkowników online, w tym zalogowanych: 0, gości: 1