Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi zugriffsverletzung bei adresse 004512F2 (https://www.delphipraxis.net/122574-zugriffsverletzung-bei-adresse-004512f2.html)

rory fluegler 18. Okt 2008 14:44


zugriffsverletzung bei adresse 004512F2
 
ich hab bei starten meines programms eine mir unbekannte fehlermeldung erhalten. kann mir jemand weiterhelfen?

Edit SirThornberry (Entfernung des Screenshot):
Fehlermeldung: Zugriffsverletzung bei Adresse 004512F2 beim schreiben von Adresse FFFFFFFF

[edit=SirThornberry]verlinkten Screenshot entfernt da unnötig - Mfg, SirThornberry[/edit]

Bernhard Geyer 18. Okt 2008 14:48

Re: fehlermeldung
 
Da wirst du wohl einen fehler in deinem Code haben. Hast du irgendwelchen Code im OnCreat/OnShow deines Hauptformulares und wenn ja wäre gut wenn du ihne posten könntest. Eine Glaskugel hat ihre Vorhersagen für heute schon durchgeführt.

Übrigens: Den Text von Fehlermeldungen bekommt man mit <Strg> + C in die Zwischenablage. Ebenfalls würde es reichen nur die meldung als Bild zur verfügung zu stellen und nicht den ganzen Bildschirminhalt.

Larsi 18. Okt 2008 14:48

Re: fehlermeldung
 
1. Herzlich Willkommen in der Dp :dp:
2. Bitte gebe dem Thread einen aussagekräftigen Titel, Fehlermeldung sagt nicht viel aus
3. Müssen wir den Quelltext sehen, denn eine Zugriffsverletzung sagt nicht so viel aus.

rory fluegler 18. Okt 2008 14:52

Re: fehlermeldung
 
sry...
@ Bernhard:ich hab in FormCreate nur randomize.
der fehler liegt wahrscheinlich hier:
Delphi-Quellcode:
procedure TForm1.QuickSort(l,r:Integer);
var i,j,Merke,Mitte: Integer;
begin
  i:= L;
  j:= R;
  Mitte:= Wert[(L+R)div 2];
  //vergleich
    while Wert[i]< Mitte do
    begin
      inc (i);
      counter_Vergleich:=counter_Vergleich+1;
    end;
    while Wert[j] > Mitte do
    begin
      dec (j);
      counter_Vergleich:=counter_Vergleich+1;
    end;

    //tauschen
   if i<=j then
    repeat
      begin
        Merke:=Wert[i];
        Wert[i]:= Wert[j];
        Wert[j]:= Merke;
        inc (i);
        dec (j);
      end;
    until i > j;

   //Rekursion
   if L < j then
     Quicksort(L,j);
   if i < R then
     Quicksort(i,R)
   else break;

jmd anders 18. Okt 2008 15:19

Re: zugriffsverletzung bei adresse 004512F2
 
schon geschaut, dass nirgendwo über die array grenzen von "Wert" geschrieben wird?

gsh 18. Okt 2008 15:23

Re: zugriffsverletzung bei adresse 004512F2
 
schon mal dein Programm mit F8 gestartet?
Damit kannst du dein Programm schritt für schritt durchgehen bis der fehler auftretet ... sowas nennt man debuggen ... dafür ist ein debugger da :roll:

SirThornberry 18. Okt 2008 15:26

Re: zugriffsverletzung bei adresse 004512F2
 
der wichtige Teil hat sich im schlecht erkennbaren Screenshot versteckt. Die Adresse an welcher der Fehler auftritt ist von Programm zu Programm verschieden je nach dem welcher Stelle im Speicher der Code steht bei dem der Fehler kommt. Wichtiger ist die Adresse auf die Zugegriffen wurde und das wie. Die Antwort lautet schreiben auf FFFFFF
Du versuchst an eine Adresse im Speicher zu schreiben die deinem Programm wohl niemals zugewiesen werden wird.

rory fluegler 18. Okt 2008 15:29

Re: zugriffsverletzung bei adresse 004512F2
 
@jmd anders: ist eigentlich nicht möglich, da L und R die grenzen sind.
@ gsh: danke für den tipp, das probier ich mal.
@ SirThornberry: und wie kann ich das beheben?

SirThornberry 18. Okt 2008 19:45

Re: zugriffsverletzung bei adresse 004512F2
 
Du würdest den Helfern schon sehr Helfen bei der Suche nach deinem Fehler wenn du die Quelltextzeile posten könntest in der genannter Fehler auftritt

Cyf 18. Okt 2008 22:10

Re: zugriffsverletzung bei adresse 004512F2
 
Ich polier mal meine Kristallkugel:

Delphi-Quellcode:
if i<=j then
    repeat
      begin
        Merke:=Wert[i];
        Wert[i]:= Wert[j];
        Wert[j]:= Merke;
        inc (i);
        dec (j);
      end;
    until i > j;
-> Entweder du hast den begin .. end Block falsch gemacht oder er ist überflüssig. Und warum tauscht du, wenn beide Werte sowieso gleich sind? Glaub aber nicht, dass die Zugriffsverletzung dort liegt, macht eigentlich keinen Sinn.
[Edit]Außerdem aus welcher Schleife soll das break am Ende raus?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 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