gpt4 book ai didi

c - 为什么我的链表程序给出 SIGSEGV?

转载 作者:行者123 更新时间:2023-11-30 20:56:18 27 4
gpt4 key购买 nike

我正在创建一个简单的链表程序来插入和查看 LL 的元素。当我尝试插入第二个元素时,它给出 SIGSEV,但我不明白为什么?!!

请帮我指出问题:

ma​​in.c:

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

typedef struct linkedList{
int data;
struct linkedList *next;
}LL;

LL *start;

int main(){

int option = 0;
while(1){
printf("Enter option: \n");
scanf("%d", &option);

switch(option){
case 1:
addNode(start);
break;
case 2:
readNodes(start);
break;
case 3:
exit(0);
}
}
}

插入节点:

int addNode(LL *startNode){

LL *temp, *node;
int data = 0;

printf("Enter data: ");
scanf("%d", &data);

if(startNode == NULL){/*Application only when the first element is inserted*/
startNode = (LL*)malloc(sizeof(LL*));
if(startNode == NULL){
printf("Error: Memory not allocated!!\n");
exit(1);
}
startNode->data = data;
startNode->next = NULL;
start = startNode;

return 0;
}

temp = startNode;

while(temp != NULL){
temp = temp->next;
}

node = (LL*)malloc(sizeof(LL*));
node->data = data;
node->next = NULL;

temp->next = node;

temp = temp->next;

return 0;
}

最佳答案

  1. sizeof 获取结构的长度,对于 32 位架构,您始终传递 4 个字节
  2. 用于迭代 temp 节点的 while 循环是错误的,您应该检查 next 节点是否为 NULL

关于c - 为什么我的链表程序给出 SIGSEGV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26401868/

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