首页 > 解决方案 > 用指针制作一个简单的整数列表

问题描述

我正在尝试创建一个用节点制作的基本积分列表(我还应该指出我正在通过做这个练习来学习指针)

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

标签: carrayspointersnodes

解决方案


那:

Node newNode;

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

列表节点通常是从带有malloc函数的堆中分配的。堆分配的内存一直存在,直到它被明确地释放free

例如:

void push(int d) {
    Node* newNode = malloc(sizeof(Node));
    newNode->data = d;
    newNode->next = head;
    head = newNode;
}

推荐阅读