Zugriffsverletzung bei Adresse



  • Also, ich hab einen Fehler, bitte helfen!

    Ich habe eine zweite form erstellt, eine Eingabemaske
    bestehend aus ComboBox, Editfeld und RichEdit
    und ein Button Speichern.
    Die eingegebenen Daten werden gespeichert, und es wird geprüft, ob alles eingegeben wurde. Es gibt noch eine Prüfung ob gespeichert wurde, wenn man das Fenster über das Kreuzchen ausmachen will.
    funktioniert eigentlich alles, nur wenn ich alles vernünftig eingebe, und auf speichern klicke.
    Kommt diese Fehlermeldung:

    Im Projetkt rzptdb.exeist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: Zugriffsverletzung bei Adresse bei Adresse 0041AB3F.
    Lesen von Adresse 00000132. Prozeß wurde angehalten. Fortfahren mit Einzelschritt oder Start.

    hört sich an wie ein Problem mit einem Zeiger.
    Kann mir da jemand von Euch helfen.



  • hiho

    hört sich an wie ein Problem mit einem Zeiger.

    kann ja sein, aber ohne code können wir kaum was machen
    mfg allison



  • Hallo

    Ohne relevanten Quellcode können wir dir da nicht helfen.
    Also benutzt erstmal den Debugger und versuch selber rauszufinden
    - wie ist der Programmablauf in deinem Code?
    - In welcher Zeile tritt der Speicherfehler auf?
    - Welche Variablen/Zeiger sind ungültig?

    bis bald
    akari



  • Ok ich habe Haltepunkte eingefügt. Offensichtlich gibt es ein Problem mit Form2->Hide (); oder kurz davor oder danach.
    Der Code

    if ((Edit1->Text != "") && (ComboBox1->Text != "Rubrik wählen"))
      {
      RichEdit1->Lines->SaveToFile (pfad_rezepte + Edit1->Text + ".txt");
      Form2->Hide();
      Sicher = true;
      }
    

    Das ganze steht bei der Methode ButtonSpeichern1Click
    Sicher ist ein bool ob gespeichert wurde.

    Fällt Euch schon was auf?

    EDIT: Also der Fehler liegt mit Sicherheit bei Form2->Hide(); ! Das hab ich jetzt herausgefunden!



  • hiho
    woher weisst du das?
    ich denke er liegt bei

    RichEdit1->Lines->SaveToFile (pfad_rezepte + Edit1->Text + ".txt");
    

    Probier das hier(pfad_rezepte + Edit1->Text + ".txt") mal mit AppendStr();, das ist nä(h)mlich falsch
    mfg allison



  • Hallo

    Was soll daran falsch sein, vorausgesetzt pfad_rezepte ist ein AnsiString und beinhaltet einen gültigen Pfad mit abschließenden Backslash?

    Und nämlich wird wirklich ohne h geschrieben 😉

    bis bald
    akari



  • Aber er speichert doch schon vernünftig.
    Außerdem bin ich bir sicher, weil ich Form2->Hide(); aus der if-Bedingung herausgenommen habe, und dahinter geschrieben habe, dann ist der Fehler dort aufgetreten, und nicht in der if Bedingung (Habe mit Haltepunkten gearbeitet)



  • Hatte ich schon erwähnt, daß ich Meldungen wie "EAccessViolation" mit einer kryptischen HEX Adresse hasse? 🙂

    Der Fehler liegt bestimmt nicht im Form->Hide() sondern irgendwo in deinem Code. irgend ein verbogener Zeiger. Beim Form->Hide() siehst Du dann nur die Auswirkungen, nicht die Ursache.

    Ich schlage mich hier schon seit nunmehr einer Woche mit sowas rum und finde den Fehler auch nicht!

    Vielleicht hat ja jemand Ahnung wie man mit sowas umgeht? Was sagt mir die Hex Adresse? Wie kann ich herasfinden welche Objekte, Variablen an dieser Adresse lokalisert sind?



  • Hallo

    Zuerstmal ist die Stelle zu finden die die Access Violation auslöst. Dann kannst du mit dem Debugger (siehe Link oben) einerseits die Variablen kontrollieren und andereseits auch über dasMenü Ansicht/Debug-Fenster/Aufruf-Stack dir den aktuellen Funktionsstack anzeigen lassen, mitsamt Argumenten. Das beides sollte reichen um Fehler im eigenen Code zu finden.

    bis bald
    akari



  • Au Backe, das hört sich ja nach riesen Problemen an!
    Ich steig wieder um auf QBasic 🙂



  • 😮 😮 😮 😮
    oups
    da hab ich wohl was verwechselt 👎 👎
    klar geh des, sry lordblacksheep
    mfg allison

    PS ich weiss wie man nä(h)mlich :p schreibt 😉



  • hiho
    mahc mal einen breakpiont und geh den code mit F7 schrittweise durch
    wo kommt der fehler????
    mfg allison



  • Aber der Fehler ist immernoch da! Was nun?
    Habt ihr ne Idee, wie man das einfach umgeht?
    Also, wenn ich Form2->Hide(); komplett entferne, dann gibts keinen Fehler mehr.
    Aber das Fenster verschwindet auch nicht! Ist Klar!



  • hiho
    Probier mal Form2->Close();
    mfg allison



  • allison schrieb:

    hiho
    mahc mal einen breakpiont und geh den code mit F7 schrittweise durch
    wo kommt der fehler????
    mfg allison

    Hab ich doch gemacht, der Fehler kommt direkt bei Form2->Hide();
    Hab es entfernt -> Fehler weg!



  • Hallo

    Ist denn Form2 an der Stelle noch gültig? Hast du vorher Form2 vielleicht schon gelöscht?

    bis bald
    akari



  • Nein, ist noch gültig



  • hiho
    was ist, wenn du

    Form2->Visible = false;
    

    verwendest?
    mfg allison



  • Hallo

    Das ruft auch nur Hide auf

    bis bald
    akari



  • hiho

    Das ruft auch nur Hide auf

    nein
    Hide setzt visible auf false
    mfg allison


Anmelden zum Antworten