Home > Blockchain >  What does this strange number mean in the output? Is this some memory Location?
What does this strange number mean in the output? Is this some memory Location?

Time:10-24

The node Class is as follow:

class node
{
    public:

    int data; //the datum
    node *next; //a pointer pointing to node data type
};

The PrintList Function is as follow:

void PrintList(node *n)
{   while (n != NULL)
    {
        cout << n->data << endl;
        n = n->next;
    }
}

If I try running it I get all three values (1,2,3) but I get an additional number as well which I'm unable to figure out what it represents, Can someone throw light on the same?

int main()
{

    node first, second, third;
    node *head = &first;
    node *tail = &third;
    first.data = 1;
    first.next = &second;
    second.data = 2;
    second.next = &third;
    third.data = 3;

    PrintList(head);    
}

I Know it can be fixed with

third.next = NULL;

But I am just curious what does this number represents in output, If I omit the above line

1
2
3
1963060099

CodePudding user response:

As described in the comment by prapin, third.next is not initialized. C has a zero-overhead rule. Automatically initializing a variable would violate this rule as the value might be initialized (a second time) later on or never even be used.

The value of third.next is just the data that happened to live in the same memory location as third.next does now. For this reason, it's recommended to always initialize your variables yourself.

CodePudding user response:

It is better to initialize variables & it is better to use nullptr. Like that (See 1-3):

#include <iostream>

class node
{
public:

    int data = 0; // 1
    node* next = nullptr; // 2
};


void PrintList(node* n)
{
    while (n != nullptr) // 3
    {
        std::cout << n->data << std::endl;
        n = n->next;
    }
}


int main()
{
    node first, second, third;

    node* head = &first;
    node* tail = &third;

    first.data = 1;
    first.next = &second;

    second.data = 2;
    second.next = &third;

    third.data = 3;
    // third.next points to where?

    PrintList(head);
}
  • Related