簡體   English   中英

鏈表錯誤-C

[英]Linked List error - 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->nextConductor

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),因為它使識別此類問題變得輕而易舉?

這就是我發現使用gdb的Conductor->next存在問題的方式:

我逐步執行了該程序,直到到達令人反感的指令為止:

25    Conductor = Conductor->next;

我試圖打印next

(gdb) print Conductor->next    

這就是我得到的:

Cannot access memory at address 0x4

而這就是我在《 Conductor

(gdb) print Conductor
$7 = (struct el *) 0x804b008

很容易看出我們有問題,因為在下一個循環中它將被分配一個無效值;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM