![]() |
Function pop causing crash
The program below fails on execution and I think the error is in my
pop function but it all looks correct.Also could someone check my code as to why my print function is not working? I havent included the other parts of my program but will if someone needs it. Please help; I have had it. I have checked all C++ websites and cannot figure it out. <code> template<class Type> void Novice<Type>::Print() { while(! IsEmpty()) { std::cout << topPtr->item; topPtr = topPtr ->next; } } template<class Type> void Novice<Type>::Pop(Type &y) { if(IsEmpty()) throw EmptyStack(); else { Node<Type> *tempPtr; tempPtr = topPtr; topPtr = topPtr -> next; delete tempPtr; } } // main function int main() { Novice<int> a; int s; a.Pop(s); // not working a.Push(1); a.Push(2); a.Push(3); cout << a.length() << endl; a.Pop(s); cout << a.length() << endl; a.Print(); } </code> |
Re: Function pop causing crash
I guess you are popping from an empty stack and it is throwing an
exception because IsEmpty will be true. Wrap the code in a try{}catch() block and catch the exception. Hope that helps. |
Re: Function pop causing crash
j_depp_99@yahoo.com wrote:
> The program below fails on execution and I think the error is in my > pop function but it all looks correct.Also could someone check my code > as to why my print function is not > working? I havent included the other parts of my program but will if > someone needs it. Please help; I have had it. I have checked all C++ > websites and cannot figure it out. > <code> > If you want some decent help, post something that compiles, otherwise we have to guess what a Novice and a Node are. -- Ian Collins. |
Re: Function pop causing crash
Prashanth wrote:
> I guess you are popping from an empty stack and it is throwing an > exception because IsEmpty will be true. Wrap the code in a > try{}catch() block and catch the exception. Hope that helps. > Please keep the context you are replying to. This post makes no sense on its own. -- Ian Collins. |
Re: Function pop causing crash
On Apr 15, 4:54 pm, j_depp...@yahoo.com wrote:
> The program below fails on execution and I think the error is in my > pop function but it all looks correct. And thats exactly what the program should do - fail. You are attempting to pop an empty container and you aren't handling the expected and thrown exception. Thats assuming that IsEmpty() is working properly. Since relying on educated guesses and assumptions is what we are asked to disscuss here: try compiling and running the following program for illustration. #include <iostream> #include <stdexcept> class EmptyStack : public std::runtime_error { public: EmptyStack() : std::runtime_error("EmptyStack error") { } }; int main() { try { throw EmptyStack(); } catch(const std::exception& r_e) { std::cout << "error: " << r_e.what(); std::cout << std::endl; } } /* error: EmptyStack error */ The std::runtime_error type is derived from std::exception. The thrown exception is therefore caught by the above catch block. What should the program do if i were to throw EmptyStack() and don't bother catching it? Try it. int main() { throw EmptyStack(); } Does the result look familiar to you? Note: you don't have to derive from anything insofar as the type EmptyStack is concerned. You can throw anything, as long as you use a try block and catch it. class EmptyStack { }; int main() { try { throw EmptyStack(); } catch(const EmptyStack& r_e) { std::cout << "error: EmptyStack" << std::endl; } // other catch blocks... } > Also could someone check my code as to why my print function is not > working? I havent included the other parts of my program but will if > someone needs it. Please help; I have had it. I have checked all C++ > websites and cannot figure it out. > <code> > > template<class Type> > void Novice<Type>::Print() > { > while(! IsEmpty()) > { > std::cout << topPtr->item; > topPtr = topPtr ->next; > } > > } The function is not 'emptying' the container in any way (IsEmpty() is never satisfied). You are therefore stepping through ghost pointers (topPtr->next). Anything can happen here - the result is undefined. > > template<class Type> > void Novice<Type>::Pop(Type &y) > { > if(IsEmpty()) > throw EmptyStack(); > else > { > Node<Type> *tempPtr; > tempPtr = topPtr; > topPtr = topPtr -> next; > delete tempPtr; > } > > } > > // main function > > int main() > { > Novice<int> a; > int s; > > a.Pop(s); // not working > a.Push(1); > a.Push(2); > a.Push(3); > cout << a.length() << endl; > a.Pop(s); > cout << a.length() << endl; > a.Print(); > > } > > </code> |
| All times are GMT. The time now is 02:53 PM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.