Stack-Prob
-
Was ist an folgendem Programm fehlerhaft? Lässt sich einbahnfrei kompilieren und linken, aber nicht fehlerfrei ausführen. Der Debugger zeigt folgendes an:
Unbehandelte Ausnahme in main.exe: 0x0000005: Access Violation.
-> 004010B2 mov dword ptr [ebp*4],ebx
da ich keine Erfahrung mit dem Debugger habe, weiss ich nicht was ich tun soll.
Irgendwie weiss ich auch nicht richtig was mit dem parameter "raus" anzufangen der mir in der übung gegeben ist? Er wird bei mir im Unterprogramm garnicht verwendet, denn ich kann ihn ja nicht inkrementieren, da andere Datentyppen auch unterstützt werden sollen.
hier der von mir programmierte Stack:
/////////////////////////////////////////////////////////////////////////////// // fixStack.cpp /////////////////////////////////////////////////////////////////////////////// #include"Stack.h" #include <iostream> using namespace std; /////////////////////////////////////////////////////////////////////////////// void main() { Stack<int> st; int i= 1; while(st.push(i)) i++; while(st.pop(i)) cout << i << endl; } /////////////////////////////////////////////////////////////////////////////// // fixStack.h /////////////////////////////////////////////////////////////////////////////// #include <iostream> #include "STlist.h" using namespace std; template <typename stackTyp> class Stack { enum {anzahl= 10 }; int counter; stackTyp* zarray; public: Stack(); ~Stack(); bool push(stackTyp rein); bool pop(stackTyp raus); }; template <typename stackTyp> Stack<stackTyp>::Stack() { counter= 1; zarray= NULL; } template <typename stackTyp> Stack<stackTyp>::~Stack() { delete[] zarray; } template <typename stackTyp> bool Stack<stackTyp>::push(stackTyp rein) { if (zarray= NULL) { zarray= new stackTyp[anzahl]; *zarray= rein; return true; } else if(counter< anzahl) { zarray[counter]= rein; counter++; return true; } else { return false; } } template <typename stackTyp> bool Stack<stackTyp>::pop(stackTyp raus) { if (zarray= NULL) { return false; } else if(counter+1 > 0) { if(counter == 0) { zarray[counter]= NULL; delete[] zarray; zarray= NULL; return true; } else { zarray[counter]= NULL; counter--; return true; } } else { return false; } }
-
broobi schrieb:
if (zarray= NULL)
Nicht gut...
-
Danke, über was man nicht alles hinwegsieht
Läuft nun!
Aber wie mach ich es bei diesem main-programm, dass ich durch den Parameter raus immer für alles verschiedenen Typen den Stack von oben bis unten ausgebe?
-
Schon erledigt!
-
tip:
if (NULL == zarray)vermeidet diesen Fehler