用指针制作一个简单的积分列表

问题描述 投票:1回答:1

我试图用Nodes创建一个基本的积分列表(我还应该指出,我正在通过做这个练习学习指针)

typedef struct Node {
    int data;
    struct Node *next;
} Node;

但似乎并不奏效。每次我试图打印列表时,它都会显示随机值这是我的代码。

Node *head = NULL;  // The head of the list - global


void push(int d) {

    Node newNode;
    if (head == NULL)
    {
        printf("In\n");
        head = &newNode;
        (*head).data = d;
    }
    else
    {
        printf("In2");
        newNode.next = head;
        head = &newNode;
    }

void printList() {
    while (head != NULL)
    {
        printf("In while\n");
        printf("%d",(*head).data);
        head = head->next;
    }
}

当我试着做例如: push(1);printList()我得到。263958281 或任何其他随机值.有人知道为什么吗?

PS:如果我试着去做。

push(1);
push(2);
printList();

我的理想输出将是。

2 1
c arrays pointers nodes
1个回答
3
投票

这样。

Node newNode;

在栈上分配节点。函数返回后,该节点就不存在了。

列表节点通常从堆中分配,用 malloc 函数,堆分配的内存会一直存在,直到它被显式deallocated。堆分配的内存会一直存在,直到用 free.

例如:

void push(int d) {
    Node* newNode = malloc(sizeof(Node));
    newNode->data = d;
    newNode->next = head;
    head = newNode;
}
© www.soinside.com 2019 - 2024. All rights reserved.