Help, Assertion Problem :((

Please support our C++ advertiser: Intel Parallel Studio Home
Reply

Join Date: Apr 2008
Posts: 24
Reputation: kalodakilla is an unknown quantity at this point 
Solved Threads: 0
kalodakilla kalodakilla is offline Offline
Newbie Poster

Help, Assertion Problem :((

 
0
  #1
Apr 11th, 2008
i came into Assertion failure during running this program, and i really don't know why, hope you guys can help, thanks a lot ^^

The program is to copy a linked list from another, the Copy function may look complicated because i'm not experienced enough to simplify it.. Without the destructor, the program runs fine..


#include <iostream.h>

struct node
{
	int data ;
	node * next ;
};

class list
{
private:
	node *head ;
public:
	list() ;
	//~list() ;
	node* Add(node *h , int d) ;
	node* Copy(node *& res , node * copy) ;
	void Input() ;
	void Display() ;
	node* GetHead() ;
	void AssignHead(node *h) ;
};

list::list()
{
	head = NULL ;
}

/*list::~list()
{
	while(head)
	{
		node *current = head->next ;
		delete head ;
		head = current ; 
	}
}*/

node * list::GetHead()
{
	return head ;
}

void list::AssignHead(node *h)
{
	head = h ;
}

node * list::Add(node *h , int d)
{
	if ( !h )
	{
		h = new node ;
		h->data = d ;
		h->next = NULL ;
	}
	else
		h->next = Add(h->next , d) ;
	return h ;
}

void list::Input()
{
	int n ;
	int d ;
	cout << "How many intergers to input: " ;
	cin >> n ;

	for ( int i = 0 ; i < n ; ++i )
	{
		cout << "Interger #" << i+1 << ", please enter: " ;
		cin >> d ;
		head = Add(head,d) ;
	}
}

void list::Display()
{
	node * current = head ;
	while (current != NULL)
	{
		cout << current->data << " " ;
		current = current->next ;
	}

}

node * list::Copy(node *& res , node * copy)
{

	if (copy)
	{
		res = copy ;
		Copy(res->next,copy->next) ;
	}

	return res ;
}



int main()
{
	list integer , a ;

	integer.Input() ;

	integer.Display() ;
	cout << endl ;

	//a.Input() ;

	//a.Display() ;

	node *res = NULL ;
	a.AssignHead(a.Copy(res , integer.GetHead())) ;

	a.Display() ;

	return 0 ;
}
Reply With Quote Quick reply to this message  
Join Date: Apr 2008
Posts: 129
Reputation: ivailosp is an unknown quantity at this point 
Solved Threads: 22
ivailosp ivailosp is offline Offline
Junior Poster

Re: Help, Assertion Problem :((

 
0
  #2
Apr 11th, 2008
while(head) - why???
you need only:
  1. list::~list() {
  2. node* current = head->next;
  3. delete head;
  4. head = current;
  5. }
Reply With Quote Quick reply to this message  
Join Date: Aug 2007
Posts: 1,674
Reputation: vmanes is a splendid one to behold vmanes is a splendid one to behold vmanes is a splendid one to behold vmanes is a splendid one to behold vmanes is a splendid one to behold vmanes is a splendid one to behold vmanes is a splendid one to behold 
Solved Threads: 193
vmanes's Avatar
vmanes vmanes is offline Offline
Posting Virtuoso

Re: Help, Assertion Problem :((

 
0
  #3
Apr 11th, 2008
The problem, while exhibiting itself when the destructor is called, is not actually in the destructor. Your Copy function makes a shallow copy - in your code object "a" points to the same memory as object "integer". When the first of those gets destroyed at program exit, the pointed to memory of head gets deleted. When the second one is passed to the destructor, it head still has that memory address, but there is no "next" member. So an invalid address is assigned to current, and then to head, and that fails when you try to access the next member of that nonexistent object.
"We Americans got so tired of being thought of as dumb by the rest of the world that we went to the polls last November and removed all doubt."
~~~~~~~~~~~~~~~~~~
Looking for an exciting graduate degree? Robotics and Intelligent Autonomous Systems (RIAS) at SDSM&T See the program brochure here.
Reply With Quote Quick reply to this message  
Join Date: Apr 2008
Posts: 24
Reputation: kalodakilla is an unknown quantity at this point 
Solved Threads: 0
kalodakilla kalodakilla is offline Offline
Newbie Poster

Re: Help, Assertion Problem :((

 
0
  #4
Apr 12th, 2008
oh i under stood, thanks a lot, i made 2 pointers pointing to the same object at the same time, so redeleting is for sure, thanks a lot again.. Need to fix the Copy function

@ ivailosp: oh i want the destructor to delete every element inside the linked list, if i take ur code, it may delete only the beginning :-?
Reply With Quote Quick reply to this message  
Reply

This thread is more than three months old.
Perhaps start a new thread instead?
Message:



Other Threads in the C++ Forum
Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC