Я написал аналогичный фрагмент кода на C ++ для 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. \n\n1. New Node. \n2. Display List.\n\n>>>");
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 : \n\n");
while(n != NULL)
{
printf("\t->%d", n->data, "\n");
n = n->next;
}
}
Когда я запускаю код, не возникает никаких проблем или ошибок вообще. Но когда я вызываю одну из двух функций, которые я там создал, возникает ошибка «Ошибка сегментации». Я бы предположил, что что-то не так с моей malloc()
функцией в void insert()
, но я не могу точно определить, что не так в методе void display()
.