我對c(和本站)相當陌生,而且在分段錯誤方面存在很多問題。我正在編寫一個程序,用於創建數字的鏈接列表並按升序插入值。C編程分段錯誤鏈表程序
void insert(struct element **head, struct element *new){
if((*head)->next == NULL && (*new).i > (*(*head)->next).i){
(*head)->next = new;
return;
}
if((*head)->next == NULL && (*new).i < (*(*head)->next).i){
new->next = (*head)->next;
*head = new;
return;
}
struct element *prev = *head;
struct element *current = (*head)->next;
while(current->next != NULL){
if((*new).i < (*current).i){
prev = current;
current = current->next;
} else if((*new).i > (*current).i){
new->next = current;
prev->next = new;
}
}
}
int main (void){
struct element **head;
int value;
printf("%s", "TEST");
printf("%s" , "Please type in an integer value. ");
scanf("%d" , &value);
printf("%s", "TEST");
do{
printf("%s", "TEST");
struct element *new;
if((new = malloc(sizeof(struct element))) == NULL){
return(NULL);
}
printf("%s", "TEST");
(*new).i = value;
printf("%s", "TEST");
if(head == NULL){
*head = new;
printList(*head);
} else if(value <= 0){
printListBackwards(*head);
}
else {
insert(head, new);
printList(*head);
}
} while(value > 0);
我不需要幫助邏輯是否正確插入或任何東西。我甚至沒有機會真正測試它,因爲在提示符後輸入一個整數後,我立即得到了分段錯誤。我知道它看起來很時髦,但規格要求您使用指向結構(鏈表頭)的指針。
共享代碼時,請確保其他用戶可以快速編譯您的代碼並重現錯誤。你的代碼在'main'函數中缺少結構定義,函數,甚至是大括號。另外,在尋求幫助之前,請確保您的代碼在編譯時不顯示警告/錯誤。嘗試使用標誌'-Wall -Wextra'進行編譯。當找出段錯誤時,我發現'valgrind'是一個非常有用的工具,試試吧。只要記住用'-g'標誌編譯生成調試符號 – 2013-04-05 01:53:09