Reputation: 418
Here is the a code snippet of my addNode method. For some reason my head node is pointing to itself. Whenever I try to print out the contents of the linked list, all I get is my head's contents.
I know about linked lists already, but I was testing to see if we can use direct structs instead of their pointers to use in linked lists.
struct Node{
char* data;
struct Node* next;
};
// Global variables
int numberOfElements = 0;
struct Node* head = NULL;
void addNode(char* inputString){
struct Node newNode;
newNode.data = inputString;
if(numberOfElements != 0){
newNode.next = head;
}
else{
newNode.next = NULL;
}
head = &newNode;
numberOfElements++;
}
P.S. If the error cannot be deduced from here, then I guess error is somewhere else in my code. If so, I can put that in here as well.
Thanks
Upvotes: 0
Views: 933
Reputation: 320661
Firstly, your code declares a local variable newNode
and attempts to include it into the list.
Local variables are destroyed when function exits. This is what happens to newNode
when addNode
exits. And your list ends up in invalid state - your head
ends up pointing to nowhere. That's what leads to the behavior you are observing. (The behavior is most definitely undefined when you attempt to print it out.)
You have to allocate your node objects in dynamic memory to make sure they live "forever" or as long as you want them to.
Secondly, your node addition logic is unnecessarily overcomplicated. It appears that you always plan to add a new node to the beginning of the list. In this case the next
field of the new node should always be set to point to the former head
. The entire if
with newNode.next = NULL
branch is completely unnecessary.
Upvotes: 4