我正在创建一个包含3个元素的列表,但是当我打印列表时,它会显示一个额外的零元素。我无法确定它来自何处。
#include <stdlib.h>
#include <stdio.h>
typedef struct node
{
int data;
struct node *next;
} node;
void Push(struct node **head, int data)
{
struct node *newNode = (struct node*) malloc(sizeof(struct node));
newNode-> data = data;
newNode-> next = *head;
*head = newNode;
}
void createList(struct node **head)
{
Push(head, 1);
Push(head, 2);
Push(head, 3);
}
void printList(struct node *head)
{
struct node *ptr = head;
while(ptr != NULL)
{
printf("%d \n", ptr-> data);
ptr = ptr-> next;
}
return;
}
int main() {
struct node *head = NULL;
head = (struct node*) malloc(sizeof(struct node));
createList(&head);
printList(head);
printf("\n");
return 0;
}
输出:
3
2
1
0
答案 0 :(得分:2)
它实际上显示了一个不确定的值。因为就在这里:
head = (struct node*) malloc(sizeof(struct node));
您在哪里创建第一个真实节点,之前插入了所有内容。你是(不)幸运的是,运行时正在为你清理内存。因为这是阻止您访问某些随机地址的唯一因素。通常,从malloc
返回的内存内容是不确定的。
删除该行,您只会看到createList
添加的项目。此外,您的程序将具有明确定义的行为。
答案 1 :(得分:0)
你的列表中有四个节点:你在malloc in&#34; main()“加上三个添加的&#34; push&#34; in&#34; createList&#34;。据推测,额外的数据中的数据为零,因为你没有将它设置为main(虽然我认为它是乱码的,因为它已分配内存但未被清除)。