levelorder und arraystack STATUS_ACCESS_VIOLATION



  • Hallo!
    Ich bin gerade dabei ein wenig mit Binärbäumen zu hantieren. Dabei möchte ich auch die Levelordertraversierung mal durchlaufen. Dazu habe ich mir ein Arraystack gebastelt und eben die Funktion zum Traversieren

    NODE {
    	NODE *left;
    	NODE *right;
    	int value;
    };
    /* Knoten des Levels 4*/
    
    NODE n4 = {0,0,4};
    NODE n6 = {0,0,6};
    NODE n12 = {0,0,12};
    NODE n14 = {0,0,14};
    
    NODE n1 = {0,0,1};
    NODE n5 = {&n4,&n6,5};
    NODE n10 = {0,0,10};
    NODE n13 = {&n12,&n14,13};
    
    NODE n2 = {&n1,0,2};
    NODE n7 = {&n5,0,7};
    NODE n11 = {&n10,&n13,11};
    
    NODE n3 = {&n2,&n7,3};
    NODE n9 = {0,&n11,9};
    
    NODE n8 = {&n3,&n9,8};
    
    SIMPLESTACKENTRY {
    	NODE *n;
    };
    
    SIMPLESTACKENTRY simplestack[20];
    int simplestacktop;
    
    void initsimplestack() {
    	simplestacktop=0;
    }
    
    int simplestackempty() {
    	return simplestacktop==0;
    }
    
    void simplepush(NODE *n) {
    	simplestack[simplestacktop].n=n;
    	simplestacktop++;
    }
    
    SIMPLESTACKENTRY simplepop() {
    	simplestacktop--;
    	return simplestack[simplestacktop];
    }
    
    void levelorder(NODE *n) {
    	SIMPLESTACKENTRY e;
    	simplepush(e.n);
    	while(!simplestackempty()) {
    		e=simplepop();
    		printf("%d,",e.n->value);
    		if(e.n->right)
    			simplepush(e.n->right);
    		if(e.n->left)
    			simplepush(e.n->left);
    	}
    }
    

    wenn ich jedoch dieses Programm aufrufe kommt es zu foldende Fehlermeldung

    mb.exe 1000 (0) handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
    [main] baumb 1000 (0) handle_exceptions: Dumping stack trace to baumb.exe.core
    

    Nur find ich einfach den Fehler nicht

    Danke und gruß



  • /* Hier wird ein SIMPLESTACKENTRY deklariert, aber nicht initialisiert, es
       enthält also einen uninitialisiertem NODE-Zeiger: */
    SIMPLESTACKENTRY e;
    
    /* Hier wird der Wert des uninitialisierten Zeigers auf den Stack gepackt: */
    simplepush(e.n);
    
    while(!simplestackempty()) {
    
        /* Hier wird der uninitialiste Zeiger wieder vom Stack geholt: */
        e=simplepop();
    
        /* Hier wird der uninitialisierte Zeiger dereferenziert;
           Chaos, Unheil und Undefined Behavior stehen uns bevor:  */
        printf("%d,",e.n->value);
    

Log in to reply