Stack Problem

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Stack Problem

    Hi.

    Ich soll nen Stack programmieren. Beim compilieren gibt es keine Fehler, beim ausführen jedoch bringt er einen Speicher Fehler.

    Ich finde den Fehler aber nicht.

    Downloaden kann man die Files hier .

    Hier nochmal die 3 Dateien:

    stack.h

    Quellcode

    1. #ifndef MYSTACK15102007 #define MYSTACK15102007 struct Stack { unsigned int depth; // Tiefe des Stacks char *content;// Inhalt des Stacks unsigned int top;// Index des obersten Elements } ; Stack* createStack(unsigned int); void push(Stack *, char); char pop(Stack *); int isEmpty(Stack *); void destroyStack(Stack *); #endif


    stack.cpp

    Quellcode

    1. #include "stack.h" #include Stack* createStack(unsigned int laenge) { Stack *p; p=(Stack*) malloc (sizeof(Stack)); p->content=(char*) malloc (laenge * sizeof(char)); p->top=-1; p->depth=laenge; return p; } void push(Stack *p, char x) { p->top++; p->content[p->top]=x; } char pop(Stack *p) { if(p->top==-1) exit(1); p->top--; return p->content[p->top+1]; } int isEmpty(Stack *p) { if(p->top!=-1) return 1; else return 0; } void destroyStack(Stack *p) { free(p->content); free(p); } main.cpp


    Quellcode

    1. #include
    2. #include "stack.h"
    3. using namespace std;
    4. int main()
    5. {
    6. // Test der Datenstruktur STACK
    7. Stack *s;
    8. s=createStack(3);
    9. push(s,'a');
    10. push(s,'b');
    11. push(s,'c');
    12. push(s,'d');
    13. while (! isEmpty(s))
    14. cout << pop(s) << endl;
    15. pop(s);
    16. destroyStack(s);
    17. cin.ignore();
    18. return 0;
    19. }
    Alles anzeigen


    Nicht wundern: mache gerade nen "Umschwung" von C auf C++.

    vielen Dank für eure Hilfe</iostream>
  • Hallo, :)

    eine kleine Anmerkung betreffend

    stack.cpp

    Quellcode

    1. Stack* createStack(unsigned int laenge) { Stack *p; p=(Stack*) malloc (sizeof(Stack));


    und

    main

    Quellcode

    1. s=createStack(3);//Zeile 10


    sowie

    main

    Quellcode

    1. push(s,'a');
    2. push(s,'b');
    3. push(s,'c');
    4. push(s,'d');//Zeilen 11-14


    Du baust Dir einen Stack aus 3 Elementen und fügst dann 4 Elemente ein; :huh:

    Quellcode

    1. malloc (sizeof())

    liefert den Speicherplatz für die Anzahl der Elemente, und da wird etwas schieflaufen
    wenn Du das als Array derart behandelst, daß Du von 0-3 zählst statt vom 1.Element bis zum letzten. ^^

    Ich hoffe das hilft weiter. :thumbsup: