Einzelnen Beitrag anzeigen

tkone

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

Re: invalid poiter und access violation

  Alt 15. Okt 2009, 07:47
so hab ich mir das auch gedacht, kann aber keinen fehler finden.

also am besten mal ein bsp.:

alle meine muster haben die breite 801 und unterscheiden sich in der höhe.

scenario 1:
ich lade ein muster ein, dass 801x600 groß ist. lade ich nun sofort ein muster dass eine andere höhe hat, funktioniert alles einwandfrei.
der array wird auf die entsprechende größe verändert und mit den neuen werten gefüllt.

scenario 2:
ich lade ein muster von 801x600 ein. dannach führe ich eine bearbeitung aus. diese bearbeitung betrifft lediglich die 1., 3. und 4. spalte des Arrays. nach der bearbeitung tretten die beiden fehlermeldungen auf, selbst wenn die bearbeitung nix am array verändert, also alle checkboxen not enabled sind.

ich setz mal die bearbeitungroutine hier rein, vielleicht fällt euch was auf.
den debugger hab ich auch schon schritt für schritt bemüht. in scenario 2 ist der array sollange 801x600(mit richtigen bytewerten gefüllt) bis der setlength befehl die größe auf das neue muster verändern möchte. sobald der befehl auf muster zugreift tritt die EAccessViolation auf.
danach hat der array dann die größe des neuen musters und auch deren richtige werte.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject); //Bereiche einfügen
var
  i: integer;
  AuswahlSG: Byte;
  SD, KS, DZ_B1, DZ_B2: Byte;
  Byte1, Byte3, Byte4: Byte;

begin
Byte1:=0;
Byte3:=0;
Byte4:=0;

case combobox1.ItemIndex of
0: AuswahlSG:=1;
1: AuswahlSG:=2;
2: AuswahlSG:=4;
3: AuswahlSG:=8;
4: AuswahlSG:=16;
5: AuswahlSG:=32;
6: AuswahlSG:=64;
7: AuswahlSG:=128;
end;

SD:=combobox2.ItemIndex;
KS:=8*combobox3.ItemIndex;

case combobox4.ItemIndex of
0..3: DZ_B1:=64*combobox4.ItemIndex;
4..7: DZ_B1:=64*(combobox4.itemindex-4);
end;

case combobox4.ItemIndex of
0..3: DZ_B2:=0;
4..7: DZ_B2:=1;
end;

If strtoint(edit2.text)>schuss_max then
  begin
  showmessage('zu hoher Wert');
  exit;
  end
else
  If strtoint(edit2.text)=schuss_max then
    button2.Visible:=true;

If Checkbox1.checked then
  Byte1:=AuswahlSG;

If Checkbox2.Checked then
  Byte3:=Byte3+SD;

If Checkbox3.Checked then
  Byte3:=Byte3+KS;

If Checkbox4.Checked then
  begin
    Byte3:=Byte3+DZ_B1;
    Byte4:=DZ_B2;
  End;

for i:=lokal_max to strtoint(edit2.Text) do
  begin
    if Checkbox1.Checked then Muster[0,i]:=Byte1;
    Muster[2,i]:=Byte3;
    Muster[3,i]:=Byte4;
  end;

lokal_max:=strtoint(edit2.Text);
edit1.text:=inttostr(lokal_max);

if lokal_max>=schuss_max then
begin
  edit2.Enabled:=false;
  Button1.Visible:=false;
end;
end;
  Mit Zitat antworten Zitat