[英]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->next
來Conductor
。
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值,因此當您嘗試取消引用它以在循環的下一次迭代中存儲輸入值時,您會遇到分段錯誤。
正如其他人指出的那樣,您應該首先使用malloc
為Conductor->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.