gpt4 book ai didi

c - 链表程序错误?在C中

转载 作者:行者123 更新时间:2023-11-30 19:13:18 25 4
gpt4 key购买 nike

尝试研究链表并在终端和 Xcode 上的 gcc 4.1.2 上尝试我的程序。

xcode 错误:线程 1:Exe_BAD_ACCESS(代码=1)终端错误;段错误

我不知道 xcode 错误是什么。出于某种原因,对于在其他 gcc 上运行的某些程序,它给了我同样的错误?

代码:

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

typedef struct node *link;
struct node {int item; link next;};

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

int i;
link t = malloc(sizeof *t);
while ( t != NULL)
{
for ( i = 0; i < 10;i++)
{
t->item = i;
t = t->next;
}
}
int count = 0;
while ( t != NULL)
{
for ( i = 0; i < 10; i++)
{
if (count == 3)
{
printf("%d\n", t->item);
continue;
}
t = t->next;
count++;
}
}
}

最佳答案

您取消引用了 t->next,它是通过 malloc() 分配的,并且未分配某些值,并调用了未定义的行为。您必须为第二个节点及以后的节点分配缓冲区。

此外,在处理列表之前,您应该取回指针t

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

typedef struct node *link;
struct node {int item; link next;};

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

int i;
link t = malloc(sizeof *t);
link head = t; /* add this line to get the pointer back */
while ( t != NULL)
{
for ( i = 0; i < 10;i++)
{
t->item = i;
t->next = malloc(sizeof *t); /* add this line */
t = t->next;
}
}
int count = 0;
t = head; /* add this line to get the pointer back */
while ( t != NULL) /* convinated with inner loop, this will lead to infinite loop */
{
for ( i = 0; i < 10; i++) /* you may want to check if t != NULL here for safety */
{
/* not invalid but odd program that print the 4th element again and again */
if (count == 3)
{
printf("%d\n", t->item);
continue;
}
t = t->next;
count++;
}
}
}

关于c - 链表程序错误?在C中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35694659/

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