AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

access violation bei arrays aus record

Offene Frage von "hugh"
Ein Thema von hugh · begonnen am 1. Sep 2003 · letzter Beitrag vom 1. Sep 2003
Antwort Antwort
Seite 1 von 2  1 2      
hugh

Registriert seit: 31. Aug 2003
6 Beiträge
 
#1

access violation bei arrays aus record

  Alt 1. Sep 2003, 01:11
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:
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}
Soviel zur Deklaration.
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:
 
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
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.
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
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#2

Re: access violation bei arrays aus record

  Alt 1. Sep 2003, 01:17
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
  Mit Zitat antworten Zitat
hugh

Registriert seit: 31. Aug 2003
6 Beiträge
 
#3

Re: access violation bei arrays aus record

  Alt 1. Sep 2003, 01:36
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
Angehängte Dateien
Dateityp: zip lernpend_107.zip (6,5 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#4

Re: access violation bei arrays aus record

  Alt 1. Sep 2003, 04:11
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ß
Angehängte Dateien
Dateityp: zip dasgrossechaos_nurkleiner.zip (8,4 KB, 3x aufgerufen)
Tim Leuschner
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#5

Re: access violation bei arrays aus record

  Alt 1. Sep 2003, 08:40
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.
Angehängte Dateien
Dateityp: zip dasgrossechaos_nochkleiner.zip (9,0 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#6

Re: access violation bei arrays aus record

  Alt 1. Sep 2003, 09:01
@Assar: Die gibt es nicht mehr
Delphi-Quellcode:
function HolWert(Wert : Boolean) : Boolean;
begin
  Result := Wert;
end;
vergess ich nie :)
Tim Leuschner
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#7

Re: access violation bei arrays aus record

  Alt 1. Sep 2003, 09:10
LOL, okay Antwort zu spät gesehen

Ist doch auch mal was schönes ... da wird sicher noch was drumherum gebaut
  Mit Zitat antworten Zitat
hugh

Registriert seit: 31. Aug 2003
6 Beiträge
 
#8

Re: access violation bei arrays aus record

  Alt 1. Sep 2003, 12:00
@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
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#9

Re: access violation bei arrays aus record

  Alt 1. Sep 2003, 13:00
Ganz spontan fällt mir an der Violation
Zitat:
0x0000000
auf,
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!';
  Mit Zitat antworten Zitat
hugh

Registriert seit: 31. Aug 2003
6 Beiträge
 
#10

Re: access violation bei arrays aus record

  Alt 1. Sep 2003, 14:57
@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
Angehängte Dateien
Dateityp: zip lernforum.zip (8,4 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz