[ Pretender @ 16.04.2004. 23:29 ] @
Hi
Code:
//: S04:LinkedList.cpp
#include <iostream>
#include <cassert>
using namespace std;

struct Node {
    int val;
    Node* next;
};

void create(Node* head, int howMany) {
    assert(head);
    Node* p1 = head;
    for (int i = 1; i < howMany; ++i) {
        Node* p2 = new Node;
        p2->val = i;
        p1->next = p2;
        p1 = p2;    
    }
    p1->next = 0;   
}

void display(Node* node) {
    assert(node);
    while (node) {
        cout << node->val << " (at " << (long)node << ")\n";
        node = node->next;
    }
}

void cleanup(Node* node) {
    if (node) {
        cleanup(node->next);
        cout << "deleting Node at " << (long)node << endl;
        delete node;
    }
}

int main() {
    Node* head = new Node;
    head->val = 0;
    create(head, 10);
    display(head);
    cout << endl << "sizeof(head)== " << sizeof(head) << endl;
    cleanup(head);

getchar();
}


0 (at 4007016)
1 (at 4007080)
2 (at 4007096)
3 (at 4007112)
4 (at 4007128)
5 (at 4007144)
6 (at 4007160)
7 (at 4007176)
8 (at 4007192)
9 (at 4007208)

sizeof(head)== 4
deleting Node at 4007208
deleting Node at 4007192
deleting Node at 4007176
deleting Node at 4007160
deleting Node at 4007144
deleting Node at 4007128
deleting Node at 4007112
deleting Node at 4007096
deleting Node at 4007080
deleting Node at 4007016

Ovde su 3 nejasnoce.
1. Kako je velicina node-a 4 bajta, kada pored integera(val) mora negde da se smesti i adresa(next) ?
2. Ako je vec velicina 4, odakle onda razlika memorijskih adresa node-ova 16 ?
3. Ako je vec ta razlika 16, odakle onda razlika izmedju head-a i drugog node-a 64 ?

TX
[ NastyBoy @ 16.04.2004. 23:51 ] @
1. Kako je velicina node-a 4 bajta, kada pored integera(val) mora negde da se smesti i adresa(next) ?

- Greshish, sizeof(head) je velichina POINTERA koji je 4 bajta, ne velichina strukture. Trebalo je sizeof(Node)

2. i 3.

- 16 bajtova je verovatno default alignement za tvoju strukturu. Znachi da ce i alokator da zauzima memoriju zaokruzhenu na 16 bajotva.
U osnovi, ne mozhesh da ochekujesh od alokatora da ti daje uvek memoriju "pakovanu" i redom. Sve zavisi od trenutne memorijske "slike"
[ filmil @ 16.04.2004. 23:57 ] @
1. head je pointer na nod. Zato sizeof(head) daje veličinu pointera. sizeof(*head) daje ono što ti treba.

2. U svetlu odgovora na br. 1 ...

3. Ovo je interna stvar alokatora. Ne treba da brineš o memorijskoj slici.

f