EAccessViolation



  • Hallo Leute

    ich habe mir eine Klasse programmiert und von der klasse ein zwei dimensionales array erstellt.bei einer if abfrage tritt der oben angesprochene Fehler auf.
    und ihc habe keine ahnung warum.

    http://www11.file-upload.net/23.12.08/wuxb8b.JPG

    heir ein bild der fehlermeldung und der Code, der nicht funktioniert.

    danke für eure hilfe



  • Das Bild ist 229x52 Pixel groß und damit /geringfügig/ unleserlich.

    Benutze deinen Debugger (wie das geht, steht hier), dann findest du den Fehler selbst.



  • Hallo Leute

    ich habe einen Array erstellt, der als Zuweisung eine Funktion einer Klasse aufruft, die ich selbst geschrieben hab.
    Definiere ich den array als Zeiger kommt ein c++ fehler

    int* ARRAY[10];
    if(ARRAY[VARIABEL[X][Y].mLesen()]>=2)
    {
    }
    

    [C++ Fehler] Spielfeld.cpp(238): E2034 Konvertierung von 'int' nach 'int *' nicht möglich

    Definiere ich den arry nur als variable, so wird das programm normal compiliert und beim aufrufen der Funktion kommt folgender Fehler

    int ARRAY[10];
    if(ARRAY[VARIABEL[X][Y].mLesen()]>=2)
    {
    }
    

    Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 0040400F in Modul 'Project1.exe'. Lesen von Adresse 01153C20'. Prozeß wurde angehalten. Mit eEinzelnen Anweißungen oder Start fortsetzen.

    Die Funktion der Variabel funktioniert einwandfrei, aber sobald es mit dem ARRAY in berührung kommt, dann tut es nicht mehr.
    Vermute mal dass ich den Return wert meiner funktion erst noch umwandeln muss. Obwohl die Funktion int zurückliefert... 😕 😕 😕
    ich habe keien Ahnung mehr.

    mfg gewup



  • Hallo

    Dein hier gezeigter zweiter Quellcode ist syntaktisch in Ordnung. Das Problem dürfte sein das einer der hier angewendeten Arrayzugriffe mit einem Index ausgeführt werden, der größer ist als die Anzahl der Elemente in dem Array.
    - Trenn die Anweisung in die einzelnen Teile auf

    int buffer = VARIABEL[X][Y].mLesen();
    if(ARRAY[buffer]>=2)
    {
    }
    

    - Benutzt den Debugger um die genaue Stelle und den genauen Grund der Speicherverletetzung herauszufinden.

    bis bald
    akari



  • Hab Das ganze mal getrennt und durch den Debugger laufen Lassen

    int buffer = VARIABEL[X][Y].mLesen();
    if(ARRAY[buffer]>=2)
    {
    }
    

    und buffer gibt mir nur Werte zwischen 1 - 9 so wie es eig sein muss.

    Array[10];
    

    Im Debugger läuft das ganze auch einwandfrei von anfang bis Ende durch und funktioniert alles.
    Aber sobald ich es ganz normal in Meinem Programm laufen lasse, kommt wieder der besagte Fehler....

    KP 😕 😕 😕 😡 😡



  • hat keiner eine antwort auf meine frage oder schon ein mal ein ähnliches problem gehabt??

    thx gewup



  • Hallo

    Dein Programm verursachet irgendwo undefiniertes Verhalten. Die genaue Ursache ist für uns hier nicht ersichtlich. Dein gezeigter Quellcode ist dabei wohl nur der Auslöser.
    Du kannst ja mal die fraglichen Stellen des Programms mit MessagesBoxes verfolgen :

    ShowMessage("X : " + IntToStr(X) + ", Y : " + IntToStr(Y));
    int buffer = VARIABEL[X][Y].mLesen();
    ShowMessage("buffer : " + IntToStr(buffer));
    int buffer2 = ARRAY[buffer];
    ShowMessage("buffer2 : " + IntToStr(buffer2));
    if(buffer2>=2)
    {
    }
    

    bis bald
    akari



  • Habe das Problem jetzt gelöst.

    ich musste den Array Doppelzahl nicht lokal in der Funktion erstellen, sondern als Attribut in der Klasse definieren.

    THX Für eure Hilfe Gruß Gewup


Anmelden zum Antworten