我试图用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
解决方案:
这样。
Node newNode;
在栈上分配节点。函数返回后,该节点就不存在了。
列表节点通常从堆中分配,用 malloc
函数,堆分配的内存会一直存在,直到它被显式deallocated。堆分配的内存会一直存在,直到用 free
.
例如:
void push(int d) {
Node* newNode = malloc(sizeof(Node));
newNode->data = d;
newNode->next = head;
head = newNode;
}