Khắc phục lỗi Segmentation fault

void readFile(List &l, char fileName[]){
    ifstream st;
    Node *p = l.pHead;
    int i = 0;
    st.open(fileName);
    cout << "Chuan bi doc file " << fileName;
    while(!st.eof()){
        st >> p->info.mssv >> p->info.name >> p->info.iClass >> p->info.DCSDL >> p->info.DCTDL >> p->info.DTB >> p->info.rate;
        i++;
        p = p->pNext;
    }
    cout << "\nSo luong sinh vien co san trong file la: " << i << endl;
    st.close();
}
void writeFile(List &l, char fileName[]){
    ofstream st
    st.open(fileName);
    for(Node *i = l.pHead; i != NULL; i = i->pNext){
        st << i->info.mssv << "\t" << i->info.name << "\t" << i->info.iClass << "\t" << i->info.DCSDL << "\t" << i->info.DCTDL << "\t" <<
         i->info.DTB << "\t" << i->info.rate << endl;
    }
    st.close();
}

Debug báo lỗi Segmentation fault ở dòng st >> p->l.pHead.mssv… nhưng mình không biết khắc phục như thế nào. Mọi người giúp với ạ!

Là dòng nào ở đoạn mã bạn đưa vậy, có thể mình mắt kém, không thấy dòng nào như bạn đã nêu.

Khả năng cực kì cao là bạn đang truy xuất con trỏ NULL. Có thể là:

  1. Xem lại tập tin liệu đã mở thành công hay chưa.
  2. Bạn đã truy xuất đúng các nút (Node) hợp lệ chưa.

Mình thấy đoạn bạn đọc tập tin có gì đó không ổn. Bạn đang chạy qua các nút, nhưng bạn có đảm bảo là các nút đã được khởi tạo? Hoặc số lượng nút trong DSLK lớn hơn hoặc bằng số lượng dữ liệu nhập vào?

3 Likes

À mình nhầm là dòng ở trong vòng lặp while ở hàm đọc file.
Mình sẽ xem lại. Cảm ơn đã hỗ trợ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?