Einzelnen Beitrag anzeigen

tkone

Registriert seit: 2. Okt 2009
Ort: Sachsen
63 Beiträge
 
Delphi 7 Professional
 
#1

invalid poiter und access violation

  Alt 12. Okt 2009, 15:03
hi hab ne fehlermeldung beim laden einer datei.
also was macht mein programm:
ich weis dem programm eine datei zu und diese soll in die einzelbestandteile aufgeteilt werden.
Die datei hat einen header und einen rumpf.
der header wird in zwie abschnitte aufgeteilt, wobei ein kleiner teil dazwischen herausgelassen wird(siehe labl weiter_st).
bis dahin funktionierts auch.
nun soll mir das delphi programm den rumpf des programmes byteweise in ein 2D array speichern.
und genau hier bringt mir das programm den fehler "Access violation".
beim beenden des programmes kommt dann die meldung "invalid pointer".

ich glaub ich bin schon betriebsblind, da ich den fehler absolut nicht finde


Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject); //JC5 laden
Label weiter_st, fertig_st;
var
  f: File of Byte;
  F_size, M_size, akt_pos: Integer;
  headerL, header_pos: Integer;
  plat_byte, schuss_byte, plat, schuss: Integer;
  wert: byte;

begin
lokal_max:=0;
edit1.Text:=inttostr(lokal_max);
edit2.Enabled:=true;

openDialog1.Execute;
AFilename:=OpenDialog1.Filename;
Assignfile(f,AFilename);
Reset(f);
F_size:=Filesize(f);
headerL:=134+length(extractfilename(AFilename));
plat_Byte:=801; //x größe des Musers für den array

// Mustergrössen bestimmmen
M_size:=F_size-headerL;
schuss_Byte:=(M_Size)/(plat_Byte);
schuss:= schuss_byte;
schuss_max:= schuss_byte;

// Dynamische Arrays dimensionieren
SetLength(Header_P1, 15);
SetLength(Header_P2, 134-15-1); //-1, da 1Byte vor Filename noch veränderlich
SetLength(Muster, plat_Byte, schuss_Byte);

Label6.Caption:='max.'+inttostr(schuss_max);
label7.Visible:=true;
label8.Visible:=false;

akt_pos:=0;
plat:=1;
header_pos:=0;

while not eof(f) Do
Begin
  read(f,wert);
  inc(akt_pos);
  // Zwecks Header Informationen
  if akt_pos<headerL+1 Then goto weiter_st;

  Muster[plat,schuss-1]:=wert;
  inc(plat);
  If plat=plat_byte then
    begin
    plat:=0;
    dec(schuss);
    end;

  If schuss=0 Then goto fertig_st;

  weiter_st:
  Begin
    If akt_pos<16 then
      header_P1[akt_pos-1]:=wert;
    If akt_pos>16+(headerL-134) then
      begin
        header_P2[header_pos]:=wert;
        inc(header_pos);
      end;

  End;

End;
fertig_st:
closefile(f);

button2.Visible:=false;
button1.visible:=true;
edit2.Text:='';

end;
  Mit Zitat antworten Zitat