Function pop causing crash

J

j_depp_99

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>
 
P

Prashanth

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.
 
I

Ian Collins

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.
 
I

Ian Collins

Prashanth said:
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.
 
S

Salt_Peter

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,774
Messages
2,569,596
Members
45,139
Latest member
JamaalCald
Top