954,504 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Adding a node to my linked list and printing it makes my program crash

Heres my problem. I can add a node to my linked list in the front and middle, and at the end. But if I add a node to the end of the list and try to print it out, the program crashes. I studied the code and didn't find any reason why it would do this. I also asked my programming teacher why and he couldn't figure it out.
Secondly, if i try to add to the end more than twice, i loose the linked list completly and the program crashes even without trying to print it. Any help would be appreciated.:)

Heres my header file:

#include <iostream>
using namespace std;

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

class linked_list
{
  private:
		node *hd;

  public:
		linked_list()
		{
			hd = NULL;
		}

		void add_to_end(int data)
		{
			node *temp;

			if (hd == NULL)
			{
				node *new_node;
				new_node = new node;
				new_node->data = data;
				//if I omit the next line then the print function works fine
				hd = new_node;
			}
			else
			{
				for (temp = hd; temp->next != NULL; temp = temp->next){}

				node *new_node;
				new_node = new node;
        new_node->data = data;
				//if I omit the next line then the print function works fine
				temp->next = new_node;
			}
		}

		void add_to_begin(int data)
		{
			node *new_head;
			new_head = new node;
			new_head->data = data;
			new_head->next = hd;
			hd = new_head;
		}

		void add_to_pos(int pos, int data)
		{
			int i;
			node *temp;
			node *new_node;
			new_node = new node;
			new_node->data = data;

			if (pos == 0)
				add_to_begin(data);
			else
			{
				for (temp = hd, i = 1; temp->next != NULL && i < pos; temp = temp->next, i++){}

				if (temp->next != NULL)
					  new_node->next = temp->next;
				temp->next = new_node;
			}
		}

		void print_list()
		{
			node *temp;
			
			for (temp = hd; temp != NULL; temp = temp->next)
			{
				cout << temp->data << " ";
			}
		}
};


And heres my main file:

#include <iostream>
#include "linked_list.h"
using namespace std;

int main()
{
	linked_list test;

	test.add_to_end(1);
	test.add_to_begin(2);
	test.add_to_begin(3);
	test.add_to_end(5);
	test.add_to_pos(1,4);
  test.print_list();

	return 0;
}


Any help would be appreciated.:)

computercobra
Newbie Poster
9 posts since Jan 2009
Reputation Points: 10
Solved Threads: 0
 

Whenever you create a new node, you need to make sure new_node->next is NULL.

Salem
Posting Sage
Team Colleague
11,531 posts since Dec 2005
Reputation Points: 5,862
Solved Threads: 953
 

I think the problem is that you are not setting the 'next' pointer of the last node to NULL. It cab be containing some garbage and giving unexpected results. Can you try this.

void add_to_end(int data)
{
	cout << "add to end" << endl;
	node *temp;

	if (hd == NULL)
	{
		node *new_node;
		new_node = new node;
		new_node->data = data;
		<strong>new_node->next = NULL</strong>;
		//if I omit the next line then the print function works fine
		hd = new_node;
	}
	else
	{
		for (temp = hd; temp->next != NULL; temp = temp->next){
			cout << "for loop" << endl;
		}

		node *new_node;
		new_node = new node;
		new_node->data = data;
		<strong>new_node->next = NULL</strong>;
		//if I omit the next line then the print function works fine
		temp->next = new_node;
	}
}


edit:concurrent replies i guess. hope you got the point.

Agni
Practically a Master Poster
655 posts since Dec 2007
Reputation Points: 431
Solved Threads: 116
 

Sweet. Putting the line:
- new_node->next = NULL;
solves the crashing problem. Now I see that the program was crashing because it was trying to access memory that didn't exist. Thanks a lot Salem and Agni.:)

computercobra
Newbie Poster
9 posts since Jan 2009
Reputation Points: 10
Solved Threads: 0
 

This question has already been solved

Post: Markdown Syntax: Formatting Help
You