Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   Function pop causing crash (http://www.velocityreviews.com/forums/t501628-function-pop-causing-crash.html)

j_depp_99@yahoo.com 04-15-2007 08:54 PM

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>


Prashanth 04-15-2007 11:39 PM

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.


Ian Collins 04-16-2007 12:29 AM

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.

Ian Collins 04-16-2007 12:29 AM

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.

Salt_Peter 04-16-2007 02:49 AM

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.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57