链表错误- C



我只是在搞乱链表,但似乎我有很多事情错在我的脑海里。我试过这个函数,我不能让它工作。我以为我可以通过简化它来解决问题,但它仍然不起作用。它通常只打印第一个元素,然后是随机的大数字(很可能是内存地址)

我只是想创建一个列表并打印它的内容。

#include <stdio.h>
#include <stdlib.h>
struct el{
    int value;
    struct el *next;
};
typedef struct el Elem;

int main()
{
    int nr, i;
    struct el *Head, *Conductor;
    Head = malloc(sizeof(Elem));
    Conductor = Head;
    printf("How many elements do you want to add? ");
    scanf("%d", &nr);
    for(i = 0; i < nr; i++)
    {
        printf("Enter value for element %d:  ", i);
        scanf("%d", &(Conductor->value));
        Conductor = Conductor->next;
        Conductor = malloc(sizeof(Elem));

    }
    free(Conductor->next);
    Conductor->next = NULL;
    Conductor = Head;
    printf("n");
    for(i = 0; i < nr; i++)
    {
        printf("%d ->  ", Conductor->value);
        Conductor = Conductor->next;
    }
   return 0;
}

在将Conductor->next分配给Conductor之前,应该先为Conductor->next分配内存。

for(i = 0; i < nr; i++)
{
    printf("Enter value for element %d:  ", i);
    scanf("%d", &(Conductor->value));
    Conductor->next = malloc(sizeof(Elem));
    Conductor = Conductor->next;
}

在分配之前进行分配是很重要的,否则"旧的"Conductor->next将不会指向新的Conductor

不能为next指针分配内存

您需要在分配之前分配:

scanf("%d", &(Conductor->value));
Conductor->next = malloc(sizeof(Elem));
Conductor = Conductor->next;

内存应该分配给Conductor->next

按如下方式更改循环,

for(i = 0; i < nr; i++)
{
    printf("Enter value for element %d:  ", i);
    scanf("%d", &(Conductor->value));
    Conductor->next = malloc(sizeof(Elem));
    Conductor = Conductor->next;
}

在这里:Conductor = Conductor->next;

导体被分配了一个NULL值,所以当你试图在循环的下一次迭代中解引用它来存储输入值时,你会得到一个分段错误。

正如其他人指出的那样,您应该首先使用mallocConductor->next分配内存。

我最后可以推荐你看一下调试器,比如gdb,因为它可以轻松地识别这些问题吗?

这就是我如何发现Conductor->next使用gdb:

有一个问题

我逐级执行程序,直到遇到那个令人不快的指令:

25    Conductor = Conductor->next;

我试图打印next中的内容:

(gdb) print Conductor->next    

我得到的是:

Cannot access memory at address 0x4

而这是我在Conductor

中的内容
(gdb) print Conductor
$7 = (struct el *) 0x804b008

很容易看出我们有一个问题,在下一个循环中,它将被分配一个无效的值;

相关内容

  • 没有找到相关文章

最新更新