Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Đọc dữ liệu từ file text vào list bị lỗi segmentation fault

  1. #1
    Ngày gia nhập
    01 2010
    Nơi ở
    Hà Nội
    Bài viết
    37

    Mặc định Đọc dữ liệu từ file text vào list bị lỗi segmentation fault

    Mình có một bài tập có một linklist thế này

    C Code:
    1. typedef struct nokiaDB
    2. {
    3.     char model[10];
    4.     char memory[15];
    5.     char size[10];
    6.     char price[20];
    7. } nokiaDB;
    8.  
    9. typedef struct nokiaList
    10. {
    11.     nokiaDB nokia;
    12.     struct nokiaList *next;
    13. } nokiaList;
    14.  
    15. nokiaList *root, *cur;

    Cho một file text, trên mỗi dòng của file text có ghi các thông số về điện thoại như trong struct : model, memory, size, price (tức là trên một dòng có 4 số liệu đó, mỗi cái cách nhau một dấu tab \t)

    Đây là hàm dùng để lấy dữ liệu từ file text ra linklist của mình
    C Code:
    1. int struct_split(FILE *fin)
    2. {
    3.     char test[MAX_LEN];
    4.     int b=0, c=0, d=0, e=0, j=0;
    5.    
    6.     rewind(fin);
    7.    
    8.     while (fgets(test,MAX_LEN,fin) != NULL)//Đọc theo từng dòng trong file text
    9.     {
    10.         cur = (struct nokiaList *)malloc(sizeof(struct nokiaList));
    11.         b=0, c=0, d=0, e=0;
    12.         for (j=0; j<strlen(test); j++)
    13.         {
    14.              cur->nokia.model[b] = test[j];
    15.                 b++;
    16.                 if (test[j+1] == '\t')
    17.                 {
    18.                     cur->nokia.model[b] = '\0';
    19.                     break;
    20.                 }
    21.         } //từ for j=0 đến đây tách ra được cái model
    22.         for (j=b+1; j<strlen(test); j++)
    23.           {
    24.  
    25.                 cur->nokia.memory[c] = test[j];
    26.                 c++;
    27.                 if (test[j+1] == '\t')
    28.                 {
    29.                     cur->nokia.memory[c] = '\0';
    30.                     break;
    31.                 }
    32.           }//từ for j=b+1 đến đây tách được cái memory
    33.           for (j=b+c+2; j<strlen(test); j++)
    34.           {
    35.  
    36.                 cur->nokia.size[d] = test[j];
    37.                 d++;
    38.                 if (test[j+1] == '\t')
    39.                 {
    40.                     cur->nokia.size[d] = '\0';
    41.                     break;
    42.                 }
    43.           }//từ j=b+c+2 đến đây tách được cái size
    44.           for (j=b+c+d+3; j<strlen(test); j++)
    45.           {
    46.             cur->nokia.price[e] = test[j];
    47.             e++;
    48.             if (test[j+1] == '\n')
    49.             {
    50.                 cur->nokia.price[e] = '\0';
    51.                 break;
    52.             }
    53.           }//từ j=b+c+d+3 đến đây tách ra được cái price, hết cái price thì trong file text xuống dòng
    54.           cur=cur->next;//chuyển đến phần tử tiếp theo trong linklist
    55.     }
    56.     cur->next=NULL;//Khi đã hết các phần tử thì đặt bằng NULL để kết thúc linklist, CodeBlock báo lỗi ở dòng này
    57.     return 0;
    58. }

    Khi mình chạy thì bị báo là segmentation fault và khi mình dùng CodeBlock để thử debug (mình chưa nắm rõ lắm cách debug) thì bị báo lỗi ở dòng cur->next=NULL

    Bạn nào biết thì giúp mình với nhé
    Cảm ơn (ah mình sẽ gửi file .c ở comment dưới)
    Cám ơn mỗi sớm mai thức dậy
    Ta có thêm ngày nữa để yêu thương

  2. #2
    Ngày gia nhập
    01 2010
    Nơi ở
    Hà Nội
    Bài viết
    37

    Đây là file text và file .c của mình, mình chạy trong ubuntu nhé, chạy trong window có thể bị lỗi vì định dạng khác nhau
    Attached Files Attached Files
    Cám ơn mỗi sớm mai thức dậy
    Ta có thêm ngày nữa để yêu thương

  3. #3
    Ngày gia nhập
    04 2010
    Nơi ở
    Recycle Bin
    Bài viết
    358

    C Code:
    1.  .....
    2.       for (j=b+c+d+3; j<strlen(test); j++)
    3.           {
    4.             cur->nokia.price[e] = test[j];
    5.             e++;
    6.             if (test[j+1] == '\n')
    7.             {
    8.                 cur->nokia.price[e] = '\0';
    9.                 break;
    10.             }
    11.           }//từ j=b+c+d+3 đến đây tách ra được cái price, hết cái price thì trong file text xuống dòng
    12.    
    13.           cur = (struct nokiaList *)malloc(sizeof(struct nokiaList)); /////thêm dòng này xem sao
    14.           cur=cur->next;//chuyển đến phần tử tiếp theo trong linklist
    15.     }
    16.     cur->next=NULL;//Khi đã hết các phần tử thì đặt bằng NULL để kết thúc linklist, CodeBlock báo lỗi ở dòng này
    17.     return 0;
    18. }
    YH : lobuocphuudu_218
    Phone : 0126 463 5095

    http://forums.congdongcviet.com/signaturepics/sigpic55872_2.gif

  4. #4
    Ngày gia nhập
    01 2012
    Nơi ở
    localhost
    Bài viết
    140

    cur->next
    Nếu bản thân cur đã là NULL thì đừng mong trỏ được tới next
    Rẹt rẹt..

  5. #5
    Ngày gia nhập
    01 2010
    Nơi ở
    Hà Nội
    Bài viết
    37

    Trích dẫn Nguyên bản được gửi bởi conrongchautien Xem bài viết
    C Code:
    1.  .....
    2.       for (j=b+c+d+3; j<strlen(test); j++)
    3.           {
    4.             cur->nokia.price[e] = test[j];
    5.             e++;
    6.             if (test[j+1] == '\n')
    7.             {
    8.                 cur->nokia.price[e] = '\0';
    9.                 break;
    10.             }
    11.           }//từ j=b+c+d+3 đến đây tách ra được cái price, hết cái price thì trong file text xuống dòng
    12.    
    13.          
    14.           cur=cur->next;//chuyển đến phần tử tiếp theo trong linklist
    15.     }
    16.     cur = (struct nokiaList *)malloc(sizeof(struct nokiaList)); /////thêm dòng này xem sao
    17.     cur->next=NULL;//Khi đã hết các phần tử thì đặt bằng NULL để kết thúc linklist, CodeBlock báo lỗi ở dòng này
    18.     return 0;
    19. }
    Mình thêm dòng đó ở vị trí bạn bảo thì vẫn bị segmentation fault nhưng nếu thêm ở chỗ trên dòng cur->next=NULL thì build ko có lỗi gì rồi, giờ thì chả hiểu sao khi tách từ file text ra struct nó lại ko i ra cái gì cả
    Cám ơn mỗi sớm mai thức dậy
    Ta có thêm ngày nữa để yêu thương

  6. #6
    Ngày gia nhập
    01 2010
    Nơi ở
    Hà Nội
    Bài viết
    37

    Mặc định Đọc dữ liệu từ file text vào list bị lỗi segmentation fault

    Cảm ơn các bạn nhé, mình sửa được lỗi này rồi

    Mod close hộ mình nhé
    Cám ơn mỗi sớm mai thức dậy
    Ta có thêm ngày nữa để yêu thương

Các đề tài tương tự

  1. Lỗi Segmentation fault (core dumped) trong cygwin do đọc file
    Gửi bởi kydinh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 31-05-2012, 10:05 PM
  2. lỗi segmentation fault bài về xâu kí tự
    Gửi bởi pentest trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 45
    Bài viết cuối: 07-05-2011, 07:24 PM
  3. Lập trình C lỗi segmentation fault khi đọc file txt trong ubuntu
    Gửi bởi anonymous91 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 22
    Bài viết cuối: 06-04-2011, 05:43 AM
  4. Lập trình C Đọc file bị lỗi Segmentation fault. Sửa như thế nào?
    Gửi bởi anonymous91 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 15
    Bài viết cuối: 25-10-2010, 07:50 PM
  5. Tại sao bị Segmentation fault ?
    Gửi bởi vietwow trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 05-01-2009, 09:35 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn