gpt4 book ai didi

c - 将节点添加到全局链表导致崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 23:52:20 25 4
gpt4 key购买 nike

我正在尝试将项目添加到链接列表中。代码编译正常,但是当我执行程序时,它在添加第一个节点之前崩溃了。代码对我来说看起来不错,但我一定遗漏了一些东西。

代码使用了这个问题所必需的全局链表。我认为我对它的使用可能是导致崩溃的原因。

主.c

#include <stdio.h>
#include <stdlib.h>
#include "LinkedList.h"

int main (int argc, char* argv[])

{
LinkedList *canQueue;
int ii;
createList();

FILE* f;
f = fopen(argv[1], "r");

if(f==NULL)
{
printf("Error: could not open file");
return 0;
}


for(ii = 0; ii < 10; ii++)
{
TinCan* tempCan = malloc(sizeof(TinCan));
fscanf(f, " label_%d", &tempCan->label); /*Read info from file into label field*/
insertLast(canQueue, tempCan); /*Inserts the new can into linked list*/
}

return 0;
}

链表.h

typedef struct TinCan
{
int label;
} TinCan;

typedef struct Node
{
TinCan* data;
struct Node *next;
} Node;

typedef struct LinkedList
{
Node *head;
} LinkedList;


void insertLast(LinkedList* list, TinCan *newData);
void createList();

extern LinkedList* canQueue;

链表.c

#include <stdio.h>
#include <stdlib.h>
#include "LinkedList.h"

LinkedList *canQueue;

void createList() /*creates empty linked list*/
{
canQueue = malloc(sizeof(LinkedList));
canQueue->head = NULL;
}

void insertLast(LinkedList* list, TinCan *newData)
{
Node* newNode = malloc(sizeof(Node));
newNode->data = newData;
newNode->next = NULL;

if(list->head==NULL)
{
list->head=newNode;
}

else
{
Node* temp;
temp = list->head;
while(temp->next!=NULL)
{
temp = temp->next;
}
temp->next = newNode;
}
printf("Added to end");
}

最佳答案

根据您的回复,您需要从 main 中删除此声明:

LinkedList *canQueue;

它正在隐藏全局 canQueue,这意味着稍后当您调用 insertLast 时:

insertLast(canQueue, tempCan);

您正在对未初始化的指针进行操作。

关于c - 将节点添加到全局链表导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16555508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com