Announcement

Collapse
No announcement yet.

Lỗi Access violation....

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C++] Lỗi Access violation....

    PHP Code:
    struct Point
    {
        
    char name[5];
        
    float xy;
    };

    struct MyArray
    {
        
    Point *a;
        
    int num;
    };

    void readStationsFromFile(char *fileNameMyArray &aMyArray &b)
    {
        
    FILE *fp;
        
    int mn;
        
    0;
        
    0;
        
    countColRow(fileNamemn);
        
    a.num n;

        
    fopen_s(&fpfileName"rt");
        if (!
    fp)
        {
            
    printf("Cannot open file...\n");
            return;
        }

        if (
    a.num <= 0)
        {
            
    printf("Your Stations.txt is empty...\n");
            return;
        }
        
    a.= new Point[a.num];

        if (
    a.== NULL)
        {
            return;
        }

        
    int i 0;

        while (!
    feof(fp))
        {
            
    fscanf_s(fp"%s %f %f\n", &a.a[i].name, &a.a[i].x, &a.a[i].y);  // Dòng bị lỗi
            
    i++;
        }

        
    fclose(fp); 

    Debug thì thấy bị lỗi ngay chỗ fscanf_s cuối, nó báo lỗi Access violation writing location.... Giờ em vẫn chưa biết là nên fix chỗ nào, phiền anh chị nào chỉ giúp em. Thanks.

    Em nghĩ là bị sai khi khai báo và cấp phát cho chuỗi.

  • #2
    Bạn có thể ghi thêm đề bài và up đầy đủ project của bạn lên được không?
    I don't know the secret to success, but the secret to failure is trying to please everyone

    Comment


    • #3
      Bạn cấp phát bộ nhớ cho con trỏ chưa?

      Comment


      • #4
        Originally posted by tara95 View Post
        Bạn có thể ghi thêm đề bài và up đầy đủ project của bạn lên được không?
        Đề này khá dài, mình chỉ post 1 đoạn phần mình đang làm trước nha:
        Bài tập của mình yêu cầu đọc từ file text có nội dung theo mẫu sau (số dòng không biết trước), cấu trúc của mỗi dòng gồm có tên ga chứa tối đa 5 kí tự (A->Z, 0->9), và 2 tọa độ số thực. Đọc vào mảng và phải xài con trỏ để cấp phát:
        A34 -1.5 2.4
        B 2 4.5
        C21 4.2 4
        Last edited by gialoui; 16-05-2014, 09:12.

        Comment


        • #5
          Originally posted by 11520214 View Post
          Bạn cấp phát bộ nhớ cho con trỏ chưa?
          Mình có cấp phát bằng new trong đoạn code rồi mà

          Comment


          • #6
            Ai giúp với

            Comment


            • #7
              Chúng tôi vô cùng quan ngại trước việc bạn không chịu up nguyên project. Rất khó để debug bạn à.
              nguyendauit@gmail.com

              Comment


              • #8
                Originally posted by 10520100 View Post
                Chúng tôi vô cùng quan ngại trước việc bạn không chịu up nguyên project. Rất khó để debug bạn à.
                Project của mình:Assignment03.rar

                Gồm 1 file .h và 2 file .cpp

                Comment


                • #9
                  Rồi, bạn sai ở đây nè.

                  PHP Code:
                  struct SArray    // Mảng lưu trữ tên ga
                  {
                      
                  char[5] array;
                      
                  int num;
                  }; 
                  Đây là một struct bạn khai báo đề lưu trữ tất cả tên ga. Trong ví dụ của bạn sẽ là 5 tên ga : "A45", "B", "C", "D", "E2" tương ứng với 5 chuỗi !
                  Tuy nhiên bạn lại chỉ dùng 1 mảng, có 5 ký tự để lưu trữ.
                  Khi bạn gọi hàm fscanf_s, bạn lại muốn gán chuỗi "A45" cho kí tự SArray.a[1], chuỗi "B" cho kí tự SArray.a[2], .... vì vậy bạn vi phạm vùng nhớ.

                  Gới ý cách sửa, bạn sửa mảng các kí tự thành mảng các chuỗi hoặc đại loại như thế
                  PHP Code:
                  struct SArray    // Mảng lưu trữ tên ga
                  {
                      
                  string* array;
                      
                  int num;
                  }; 

                  Hi vọng giúp được bạn.
                  nguyendauit@gmail.com

                  Comment


                  • #10
                    Originally posted by 10520100 View Post
                    Rồi, bạn sai ở đây nè.

                    PHP Code:
                    struct SArray    // Mảng lưu trữ tên ga
                    {
                        
                    char[5] array;
                        
                    int num;
                    }; 
                    Đây là một struct bạn khai báo đề lưu trữ tất cả tên ga. Trong ví dụ của bạn sẽ là 5 tên ga : "A45", "B", "C", "D", "E2" tương ứng với 5 chuỗi !
                    Tuy nhiên bạn lại chỉ dùng 1 mảng, có 5 ký tự để lưu trữ.
                    Khi bạn gọi hàm fscanf_s, bạn lại muốn gán chuỗi "A45" cho kí tự SArray.a[1], chuỗi "B" cho kí tự SArray.a[2], .... vì vậy bạn vi phạm vùng nhớ.

                    Gới ý cách sửa, bạn sửa mảng các kí tự thành mảng các chuỗi hoặc đại loại như thế
                    PHP Code:
                    struct SArray    // Mảng lưu trữ tên ga
                    {
                        
                    string* array;
                        
                    int num;
                    }; 

                    Hi vọng giúp được bạn.
                    Sao mình sửa lại thành string rồi mà nó vẫn bị lỗi đó, bạn thử sửa trên project của mình rồi chạy xem được ko? Còn cái chỗ fscanf_s vậy có cần chỉnh sửa gì ko bạn?

                    Comment


                    • #11
                      Originally posted by 10520100 View Post
                      Rồi, bạn sai ở đây nè.

                      PHP Code:
                      struct SArray    // Mảng lưu trữ tên ga
                      {
                          
                      char[5] array;
                          
                      int num;
                      }; 
                      Đây là một struct bạn khai báo đề lưu trữ tất cả tên ga. Trong ví dụ của bạn sẽ là 5 tên ga : "A45", "B", "C", "D", "E2" tương ứng với 5 chuỗi !
                      Tuy nhiên bạn lại chỉ dùng 1 mảng, có 5 ký tự để lưu trữ.
                      Khi bạn gọi hàm fscanf_s, bạn lại muốn gán chuỗi "A45" cho kí tự SArray.a[1], chuỗi "B" cho kí tự SArray.a[2], .... vì vậy bạn vi phạm vùng nhớ.

                      Gới ý cách sửa, bạn sửa mảng các kí tự thành mảng các chuỗi hoặc đại loại như thế
                      PHP Code:
                      struct SArray    // Mảng lưu trữ tên ga
                      {
                          
                      string* array;
                          
                      int num;
                      }; 

                      Hi vọng giúp được bạn.
                      Bạn ơi, mình sửa thành string rồi mà sao vẫn bị lỗi Xem lại giúp mình với, mình đang cần gấp để hoàn thành bài tập. Thanks

                      Comment


                      • #12
                        Originally posted by gialoui View Post
                        Sao mình sửa lại thành string rồi mà nó vẫn bị lỗi đó, bạn thử sửa trên project của mình rồi chạy xem được ko? Còn cái chỗ fscanf_s vậy có cần chỉnh sửa gì ko bạn?
                        string là một class của C++ thì phải nhập bằng iostream chứ không có scanf nhá

                        Comment


                        • #13
                          Originally posted by sinhvien.uit View Post
                          string là một class của C++ thì phải nhập bằng iostream chứ không có scanf nhá
                          Đọc file bằng iostream sử dụng như thế nào vậy bạn?

                          Comment


                          • #14
                            Originally posted by gialoui View Post
                            PHP Code:
                            struct Point
                            {
                                
                            char name[5];
                                
                            float xy;
                            };

                            struct MyArray
                            {
                                
                            Point *a;
                                
                            int num;
                            };

                            void readStationsFromFile(char *fileNameMyArray &aMyArray &b)
                            {
                                
                            FILE *fp;
                                
                            int mn;
                                
                            0;
                                
                            0;
                                
                            countColRow(fileNamemn);
                                
                            a.num n;

                                
                            fopen_s(&fpfileName"rt");
                                if (!
                            fp)
                                {
                                    
                            printf("Cannot open file...\n");
                                    return;
                                }

                                if (
                            a.num <= 0)
                                {
                                    
                            printf("Your Stations.txt is empty...\n");
                                    return;
                                }
                                
                            a.= new Point[a.num];

                                if (
                            a.== NULL)
                                {
                                    return;
                                }

                                
                            int i 0;

                                while (!
                            feof(fp))
                                {
                                    
                            fscanf_s(fp"%s %f %f\n", &a.a[i].name, &a.a[i].x, &a.a[i].y);  // Dòng bị lỗi
                                    
                            i++;
                                }

                                
                            fclose(fp); 

                            Debug thì thấy bị lỗi ngay chỗ fscanf_s cuối, nó báo lỗi Access violation writing location.... Giờ em vẫn chưa biết là nên fix chỗ nào, phiền anh chị nào chỉ giúp em. Thanks.

                            Em nghĩ là bị sai khi khai báo và cấp phát cho chuỗi.

                            bạn thay dòng lỗi đó thành thế này xem sao:
                            PHP Code:
                             fscanf_s(fp"%s %f %f\n", &(a.a+i)->name, &(a.a+i)->x, &(a.a+i)->y
                            Last edited by 09520109; 17-05-2014, 21:47.
                            Hãy là chính mình!

                            Comment


                            • #15
                              Originally posted by 09520109 View Post
                              bạn thay dòng lỗi đó thành thế này xem sao:
                              PHP Code:
                               fscanf_s(fp"%s %f %f\n", &(a.a+i)->name, &(a.a+i)->x, &(a.a+i)->y
                              Mình sửa lại vậy thì nó xuất hiện thêm cái lỗi ở chỗ: &(a.a+i)->name ngay dấu ngoặc đầu tiên: Expression must have pointer-to-class type. Bạn có thể download cái project ở page 1 về xem thử giúp mình với Mình cũng nhờ sửa lỗi này nhiều lắm mà vô phương.

                              Comment

                              LHQC

                              Collapse
                              Working...
                              X