我的问题是,当我第一次尝试将节点添加到我的单链表时,一切都在预料之中,但是当我想添加另一个节点时,我的程序崩溃了。好像我的错误是由于尝试写入0地址引起的。但是我似乎无法在我的代码中找到错误。我在使用malloc吗? 这是代码:
typedef struct linkedList
{
int StudentId;
char name[100];
char dep[100];
struct linkedList *next;
} LinkedList;
LinkedList *head = NULL;
LinkedList *current = NULL;
LinkedList *createList(int val, char name[], char dep[])
{
LinkedList *ptr = (LinkedList *)malloc(sizeof(LinkedList));
if (ptr == NULL)
{
printf("Node Creation Failed\n");
return NULL;
}
ptr ->StudentId = val;
strcpy(ptr -> name, name);
strcpy(ptr ->dep, dep);
ptr ->next = NULL;
head = current = ptr;
return ptr;
}
LinkedList *addToList (int val, char name[], char dep[])
{
if (head == NULL)
{
return (createList(val, name, dep));
}
else
{
LinkedList *ptr = (LinkedList *)malloc(sizeof(LinkedList));
if (ptr = NULL)
{
printf("Node Creation Failed\n");
return NULL;
}
ptr -> StudentId = val;
strcpy(ptr ->name, name);
strcpy(ptr ->dep, dep);
ptr -> next = NULL;
current -> next = ptr;
current = ptr;
return ptr;
}
}
主要功能: AddtoList(10, “ABC”, “ABC”); 调用createList,没问题但是 如果我再次使用AddtoList,程序崩溃,createList和AddtoList真的相似,无法弄清问题是什么。
答案 0 :(得分:2)
更改
if (ptr = NULL)
到
if (ptr == NULL)
在您的情况下,ptr
被分配到NULL
,if中的表达式被评估为0
。控制转到ptr -> StudentId = val;
。它试图访问写保护的内存,因此崩溃。