C语言 在 main() 中将指针分配给 NULL 后未执行的循环



我从指针练习视频中编写了这C代码,我遇到的问题是,在将 head 作为局部主变量集成到main()之前声明的全局变量上后,程序不再进入 for 循环,我似乎无法弄清楚为什么。 有趣的是我删除了head=NULL,循环似乎正在执行。有谁知道将 NULL 分配给头部的问题在哪里?

这是我的代码:

#include <stdlib.h>
#include <stdio.h>
struct Node{
int data;
struct Node* next;
};
struct Node* Insert(struct Node* head, int data){
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));    
(*new_node).data = data;
(*new_node).next = head;
head = new_node;
}
void Print(struct Node* head){
struct Node* temp = (struct Node*)malloc(sizeof(struct Node));
temp = head;
while(temp!=NULL){
printf("%d", (*temp).data);
temp = (*temp).next;
}
printf("n");
}
int main(){
struct Node* head = NULL;
int n, i, x;
printf("%s", "How large do you want your array to be?n");
scanf("%d", &n);
for(i; i<n; i++){
printf("Enter a number:n");
scanf("%d",&x);
head = Insert(head, x);
Print(head);    
}
return 0;
}

我可以看到你的代码有几个问题:

struct Node* temp = (struct Node*)malloc(sizeof(struct Node));
temp = head;

应该是

struct Node* temp = head;

然后我们有

for(i; i<n; i++)

那应该是

for(i=0; i<n; i++)

这可能是问题的原因,因为这是未定义的行为。

另一件可能引起麻烦的事情是,您不会return head作为Insert中的最终陈述。

其中两个可以通过打开编译器警告轻松发现。

另外,不要施放马洛克

相关内容

  • 没有找到相关文章

最新更新