![]() |
access violation bei arrays aus record
Hallo zusammen,
bin neu hier und habe ein Problem beim Operieren mit Arrays aus einem Record; ich erhalte immer an der gleichen Stelle im Debug-Modus die Informationsmeldung "project D:\bla\bla.exe faulted with message: 'access violation at 0x0000000 read of address 0x00000000' Process stopped.",zugleich öffnet sich das CPU-Fenster. Der Record und die Arrays sehen folgendermassen aus:
Delphi-Quellcode:
Soviel zur Deklaration.
implementation
type satztyp = Record Satznummer : Integer; Frage, Antwort : String; end; var k,l,m,n,jo,i0: Integer; Level1, AbfrageArray : array[0..3] of satztyp; Level2 : array[0..7] of satztyp; Level3 : array[0..19] of TLernstoffsatztyp; Level4 : array[0..31] of TLernstoffsatztyp; Level5 : array[0..51] of TLernstoffsatztyp; {$R *.dfm} Ich benutze die globalen Integers um durch die insgesamt 6 Arrays zu navigieren. Das Problem tritt in der Abfrageroutine auf und zwar immer nach der insgesamt 6. Inkrementierung von k. Hier der Codeausschnitt dazu:
Delphi-Quellcode:
Hab'mich auf den Code beschränkt, in dem der Fehler auftritt. Ansonsten benutze ich Memos zur Texteingabe zusammen mit einem OnKeyUp-EventHandler. Die Arrays und Integers werden im FormCreateEvent initialisiert. Wenn ich das Programm kompiliere und außerhalb von Delphi ausführe, schließt es sich an derselben Stelle wie im Debug-Modus.procedure TForm1.Abfrage(Antwort: string); var j: Integer; KopierArray: array[0..3] of TLernstoffsatztyp; kopiert: Boolean; begin kopiert:=false; o:=0; if Antwort = (AbfrageArray[i0].Antwort) then begin inc(Richtig); case AbfrageArray[i0].Satznummer of 0: begin Level2[k].Frage:=AbfrageArray[i0].Frage; Level2[k].Antwort:=AbfrageArray[i0].Antwort; Level2j[k].Satznummer:=1; AbfrageArray[i0].Frage:=Leer; AbfrageArray[i0].Antwort:=Leer; AbfrageArray[i0].Satznummer:=10; inc(k);//im else-Zweig dieser if-Anweisung wird zurück in Level1 //kopiert Nun ich hoffe, dass einer von Euch eine Idee hat, was mein Fehler ist oder wie ich ihn weiter eingrenzen kann. Danke im Voraus, Gruss, Andreas |
Re: access violation bei arrays aus record
bei einer kompletten ZIP mit den Projektdateien (Unit mit dem TForm und dem Fehler) innerhalb von 10 Minuten, würde ich mal kurz drüberschauen (ansonsten bin ich unterwegs ins Bett ;)).
In einem Forum und so wie bei dir formatiert, kann man Delphi-Code ja nicht normal lesen ;) |
Re: access violation bei arrays aus record
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
hab' gar nicht so schnell mit einer Antwort gerechnet. Das Zipfile hab' ich angehängt, brauchte aber etwas länger, um Fehler durch 'rumprobieren wieder auszumerzen. Muss Dich/Euch warnen, Ordnung ist nicht meine Stärke. Der Fehler tritt auf in Datei Lernpend.pas Zeile 518, Prozedur Abfrage, die wiederum von der Prozedur LoesungMKeyup aufgerufen wird. Gruss, Andreas |
Re: access violation bei arrays aus record
Liste der Anhänge anzeigen (Anzahl: 1)
Also mich wundert nicht, das Du den Durchblick verloren hast.
Bei dem Code- und VariablennamenChaos verliert man bei Code>500 Zeilen unbedingt den Durchblick. Nicht, daß ich mich immer an die allgemein anerkannten Formatierungskonventionen halten würde, aber ich halte mich an meine eigenen, die mir Durchblick und Geschwindigkeit verschaffen. Ich habe Zähneknirschend den Kram mal formatiert und mit ein paar Kommentaren versehen - Dein Problem löst das eventuell noch nicht ( k.A. - habe nach 1 Stunde ehrlichen Bemühens die Lust komplett verloren). Aber vielleicht kannst Du ja etwas daraus lernen - ein paar Vorschläge findest Du im bearbeiteten Code (siehe Anhang). "Und so hoffte er denn, wenigstens Jemanden auf den rechten Weg gebracht zu haben..." Gruß |
Re: access violation bei arrays aus record
Liste der Anhänge anzeigen (Anzahl: 1)
War leider zu spät in der Nacht. Jetzt schau ich aber mal rein ;)
Wo ist die Funktion HolWert deklariert? Nachtrag: Grausam, habe Leuselators Formatierungen nochmal etwas überholt (was nur heißen soll, daß sie mir nicht weit genug gingen ... O-Ton der Opposition ;)). Sollte jetzt ungefähr Borland-Style entsprechen (zumindest äußerlich). Der Code ist echter Spaghetti-Code ... quasi unwartbar. Mehrere Funktionen machen mal eben das selbe etc pp :-( Habe für HolWert eine Fake-Func erstellt, die erstmal nur True zurückliefert. Wenn ich denn mal weiter Zeit habe, schau ich nochmal drauf. |
Re: access violation bei arrays aus record
@Assar: Die gibt es nicht mehr
Delphi-Quellcode:
vergess ich nie :)
function HolWert(Wert : Boolean) : Boolean;
begin Result := Wert; end; |
Re: access violation bei arrays aus record
LOL, okay Antwort zu spät gesehen ;)
Ist doch auch mal was schönes ;) ... da wird sicher noch was drumherum gebaut ;) |
Re: access violation bei arrays aus record
@Leuselator
Besten Dank für Deine Tips und Aufräumarbeiten. @alle Werde mich nachher daran setzen, Zeit hab' ich gerade genug, meinen Code für die Allgemeinheit lesbar zu machen. Gruss, Andreas |
Re: access violation bei arrays aus record
Ganz spontan fällt mir an der Violation
Zitat:
dass es sich wahrscheinlich um eine BereichsUNTERschreitung handelt! Das bedeutet, dass Du irgendwo z.B. auf das nullte Element eines Arrays zugreifst, obwohl das Array erst bei 1 (eins) anfängt! Ich werde hier nun eine BereichsUNTERschreitung und eine BereichsÜBERschreitung demonstrieren:
Delphi-Quellcode:
const min = 0;
max = 5; Var MyArray : Array[min..max] of String; ... MyArray[min - 1] := 'Ich löse eine Violation an 0x0000000 aus!'; MyArray[max + 1] := 'Ich löse eine Violation an 0xFFFFFFF aus!'; |
Re: access violation bei arrays aus record
Liste der Anhänge anzeigen (Anzahl: 1)
@Leuselator
Deine Aufräumarbeiten haben den Fehler ausgemerzt. Das Komische ist, dass ich die Abfrageroutine schon 'mal in einer Konsolenanwendung getestet habe und sie einwandfrei funktionierte. Anscheinend kommt der Compiler mit meiner Unordnung auch nicht zurecht. Besten Dank nochmals, Gruss Andreas @alle P.S.: Würde mich trotzdem interesieren, wie es zu so was kommt.... Hab' den lauffähigen Programmcode noch beigefügt. Bis dann, Andreas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz