[問題] 連結串列的問題 (存取錯誤)

看板C_and_CPP (C/C++)作者 (瓶子)時間16年前 (2010/06/04 22:07), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 當資料輸入進去時要進行刪除或是顯事都會發生存取錯誤。 希望得到的正確結果: 當執行刪除時會把串列的最後一筆資料刪除,顯示時會把輸入的所有資料顯示出來。 程式跑出來的錯誤結果: 存取錯誤 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dev-C++ 有問題的code: (請善用置底文標色功能) #include <stdio.h> #include <stdlib.h> #include <string.h> void add(); void del(); void pri(); struct student{ char name[30]; double score; struct student *next; }; struct student *ptr,*current,*preu,*head; int main() { int i; do{ printf("\n1.加入資料(前端)\n"); printf("2.刪除資料(後端)\n"); printf("3.顯示資料\n"); printf("4.結束程式\n"); printf("請輸入欲執行動作的編號:"); scanf("%d",&i); switch(i) { case 1: add(); break; case 2: del(); break; case 3: pri(); break; case 4: exit(0); } }while(1); system("PAUSE"); return 0; } void add() //將資料加入前端 { head=(struct student *)malloc(sizeof(struct student)); ptr=(struct student *)malloc(sizeof(struct student)); printf("請輸入姓名:"); scanf("%s",ptr->name); printf("請輸入成績:"); scanf("%lf",&ptr->score); ptr->next=head->next; head->next=ptr; } void del() //將資料的尾端刪除 { current = ptr; if (current == NULL) printf("無資料\n"); else { current=head->next; while (current != NULL) { preu=current; current=current->next; } printf("已刪除%s的資料\n",current->name); preu->next=NULL; free(current); } } void pri() //顯示所輸入的資料 { current = ptr; if (current == NULL) printf("無資料\n"); while(current != NULL ) { printf("%s的成績%3.2f\n", current->name , current->score); current = current->next; } } 補充說明: 不好意思 麻煩大家了! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.44.80.202

06/04 22:14, , 1F
add 不僅沒加入節點, 甚至還有 memory leak
06/04 22:14, 1F

06/04 22:21, , 2F
add 前兩行, 好像完全沒考慮head,ptr可能原本有無資料
06/04 22:21, 2F
文章代碼(AID): #1C2GYq-k (C_and_CPP)
文章代碼(AID): #1C2GYq-k (C_and_CPP)