我在 Windows C++中编写了一段类似的代码,在其中我创建了一个基本的单链表,添加数据并显示列表的内容。这次我尝试用 C 语言为 Linux 编写类似的程序。似乎没有编译器错误或运行时错误,但是当我尝试调用函数void insert()
时,程序控制台告诉我存在分段错误。
我的代码包含在下面:
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node* next;
}*nPtr;
nPtr head = NULL;
nPtr cur = NULL;
void insert(int Data);
void display();
int main(void)
{
int opr, data;
while (opr != 3)
{
printf("Choose operation on List. nn1. New Node. n2. Display List.nn>>>");
scanf("%d", opr);
switch (opr)
{
case 1 :
printf("Enter data.n");
scanf("%d", data);
insert(data);
break;
case 2 :
display();
break;
case 3 :
exit(0);
default :
printf("Invalid value.");
}
}
getchar();
}
void insert(int Data)
{
nPtr n = (nPtr) malloc(sizeof(nPtr));
if (n == NULL)
{
printf("Empty List.n");
}
n->data = Data;
n->next = NULL;
if(head != NULL)
{
cur= head;
while (cur->next != NULL)
{
cur = cur->next;
}
cur->next = n;
}
else
{
head = n;
}
}
void display()
{
struct Node* n;
system("clear");
printf("List contains : nn");
while(n != NULL)
{
printf("t->%d", n->data, "n");
n = n->next;
}
}
当我运行代码时,似乎根本没有任何问题或错误。但是当我调用我在那里创建的 2 个函数中的任何一个时,会出现一个错误,显示"分段错误"。我假设我在void insert()
中的malloc()
函数会出错,但我无法指出void display()
方法中的问题。
display()
函数从不初始化n
。声明应为:
nPtr n = head;