Wieso: System.AccessViolationException



  • Hallo,

    ich habe ein ganz kleines Windows Forms Programm entworfen, bei dem nach einem Klick auf einen Button einige Felder erzeugt werden sollen, und nach dem Ablauf einiger Schritte wieder gelöscht. Dabei tritt aber ein System.AccessViolationException Fehler auf, den ich vorher noch nie hatte und dessen Auflösung mir unklar ist.

    Hier der Code:

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    { 
    
    char binarisiert[]="002Binarisiert.bmp";
    char knoteneingezeichnet[]="005skelettmitrotenknoten.bmp";
    char ende[]="006skelettmitbuntenknotenundabschnitten.bmp";
    char pixelfreinachallem[]="004skelettkorrigiert.bmp";
    char zielbild[]="zielbild.bmp";
    char grosseknoten[]="007echtesbildmitblauenknoten.bmp";
    char grosseabschnitte[]="008echtesbildmitabschnittenundknoten.bmp";
    char binaerkorrigiert[]="003echtesbildbinaerkorrigiert.bmp";
    char originalbild[]="original.bmp";
    char skelettbild[]="skelett.bmp";
    char hgsubtrahiert[]="hgsubtrahiert.bmp";
    char zuskelettieren[]="objekt.bmp";
    char tabelle[]="tabelle.bmp";
    char neueknoten[]="012Knotenandersgefunden.bmp";
    
    int (*a)[1500] = new int [1500][1500];
    int (*kopie_a)[1500]= new int [1500][1500];
    int (*b)[1500] = new int [1500][1500];
    int (*diaglaenge)[1500] = new int [1500][1500];
    int (*c)[1500] = new int [1500][1500];
    int (*d)[1500] = new int [1500][1500];
    int (*closed_graph)[1500] = new int [1500][1500];
    int (*laengen_matrix) [1500] = new int [1500][1500];
    int (*flaechen_matrix) [1500] = new int [1500][1500];
    
    float (*alpha)[1500] = new float [1500][1500];
    float (*beta)[1500] = new float [1500][1500];
    float (*gamma)[1500] = new float [1500][1500];
    float (*delta)[1500] = new float [1500][1500];
    
    float (*d_1)[1500] = new float [1500][1500];
    float (*d_2)[1500] = new float [1500][1500];
    float (*d_3)[1500] = new float [1500][1500];
    float (*d_4)[1500] = new float [1500][1500];
    float (*leitwert_matrix) [1500] = new float [1500][1500];
    float (*dicken_matrix) [1500] = new float [1500][1500];
    float (*skelett_leitwertfeld) [1500] = new float[1500][1500];
    
    int (*neuesknotenfeld)[1500] = new int [1500][1500];
    int (*neuesknotenfeldbackup)[1500] = new int [1500][1500];
    int (*venenlaengen)[1500] = new int [1500][1500];
    int (*bfake)[1500] = new int [1500][1500];
    int (*becht)[1500] = new int [1500][1500];
    int (*knotenfeld)[1500] = new int [1500][1500];
    int (*cluster)[1500] = new int [1500][1500];
    int (*klaenge)[1500]= new int [1500][1500];
    int (*sicherheitsfeld)[1500]= new int [1500][1500];
    int (*abschnittslaengenfeld)[1500] = new int [1500][1500];
    int (*feld_der_laenge)[1500] = new int [1500][1500];
    float (*feld_der_dicke)[1500] = new float [1500][1500];
    int (*feld_der_flaeche)[1500] = new int [1500][1500];
    float (*feld_der_widerstaende)[1500] = new float [1500][1500];
    int  *bildpunkt_startknoten = new int [990000];
    int  *bildpunkt_endknoten = new int [990000];
    
    			   /*Löschen aller Felder aus dem Speicher*/
    			    	delete [] a;
    			    	delete [] b;
    				delete [] c;    
    				delete [] d; 
    				delete [] feld_der_laenge;
                    		delete [] feld_der_dicke;
    				delete [] feld_der_flaeche;
    				delete [] feld_der_widerstaende;
    			    	delete [] kopie_a;
    				delete [] diaglaenge;
    
    				delete [] bfake;
    				delete [] knotenfeld;    
    				delete [] cluster;    
    				delete [] abschnittslaengenfeld;
    				delete [] klaenge;	
    				delete [] neuesknotenfeld;	
    				delete [] neuesknotenfeldbackup;
    				delete [] alpha;	
    				delete [] beta;	
    				delete [] gamma;	
    				delete [] delta;
    				delete [] d_1;	
    				delete [] d_2;	
    				delete [] d_3;	
    				delete [] d_4; 
    				delete [] diaglaenge;
    				delete [] closed_graph;
    				delete [] skelett_leitwertfeld;
    				delete [] leitwert_matrix;
    				delete [] laengen_matrix;
    				delete [] flaechen_matrix;
    				delete [] dicken_matrix;
    				delete [] bildpunkt_startknoten;
    				delete [] bildpunkt_endknoten;
    }
    

    Beim Ausführen kommt der Fehler bei der Zeile:

    delete [] closed_graph;

    tausche ich die Felder um, erscheint der Fehler immer in der selben Zeile, daher hat wohl alles etwas mit dem Speicher zu tun.

    Kann mir bitte jemand helfen?


  • Mod

    Ist das ein Scherz? Warum machst du das? Und warum benutzt du keine Vectoren?



  • SeppJ schrieb:

    Ist das ein Scherz? Warum machst du das? Und warum benutzt du keine Vectoren?

    Da reichen auch ganz normale statische Arrays.



  • Hallo,

    nein das ist kein Scherz,

    das Programm ist im Prinzip riesig hat ~ 8000 Zeilen und soll ganz einfach von einem KOmmandozeilenprogramm zu einem Windows Forms Programm werden.

    Davon abgesehen funktioniert es ja auch tadellos, und beschert unseren Forschungsprojekt hervorragende Netzwerkanalysen, also: es funktioniert 🙂

    Mir liegt nur daran den Fehler jetzt zu verstehen, und ich bitte die unsaubere Programmierung zu entschuldigen, ich habe das einfach nie besser gelernt.

    Wo sollte ich Vektoren benutzen, und wieso kommt denn nun dort ein Fehler?



  • Das ist kein C++, das gehört hier hin: http://www.c-plusplus.net/forum/f58



  • cooky451 schrieb:

    Das ist kein C++, das gehört hier hin: http://www.c-plusplus.net/forum/f58

    Danke, das stimmt wohl.

    Es wäre sehr lieb wenn ein Moderator den Thread verschieben könnte. 🙂



  • Doppeltes delete auf diaglaenge.



  • Asche auf mein Haupt.

    Und: Dankeschön 🙂



  • scherzkeks schrieb:

    SeppJ schrieb:

    Ist das ein Scherz? Warum machst du das? Und warum benutzt du keine Vectoren?

    Da reichen auch ganz normale statische Arrays.

    Probier das mal aus du Scherzkeks.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x, bzw. C++11) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Ok, Frage eigentlich beantwortet, aber vielleicht bekommst du hier noch ein paar passende allgemeine Tipps. Aus Sicht von C++ ist das Programm jedenfalls eine Katastrophe.


Anmelden zum Antworten