Announcement

Collapse
No announcement yet.

Lỗi cấp phát bộ nhớ

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

  • [C++] Lỗi cấp phát bộ nhớ

    Mình đang làm 1 bài tập về class, thì phát hiện lỗi về cấp phát động, nguyên nhân là hàm delete ở detructor, sau đó mình viết 1 ct để test thì vẫn gặp lỗi tương tự:
    Code:
     //mình ko tạo empty project
     #include "stdafx.h"
    
     int main()
     {
             int **test;
             int i;
             test= new*[3];
             for(i=0;i<3;i++)
             {
                     test[i]=new int[1];
                     test[0][i]=0;
             }
    
             for(i=0;i<3;i++)
                     delete[] test[i];
             delete[] test;
    
             return 0;
     }
    đoạn code chỉ là tạo 1 mảng con trỏ gồm 3 phần tử, mỗi phần tử là 1 mảng 1 chiều (mình cho mảng chỉ có 1 pt để đơn giản)

    khi debug thì phát hiện lỗi ở delete[] test[i]
    thông báo lỗi như sau :

    "Windows has triggered a breakpoint in alloc.exe. // alloc là tên file project của mình
    This may be due to a corruption of the heap, which indicates a bug in
    alloc.exe or any of the DLLs it has loaded.
    This may also be due to the user pressing F12 while alloc.exe has focus.
    The output window may have more diagnostic information."
    vào output window thì phát hiện dòng
    "HEAP[alloc.exe] Heap block at X modified at Y past requested size of 28"
    X và Y là mã hex,mình đoán là địa chỉ ô nhớ.
    Note:
    - mảng 1 chiều ko gặp lỗi.
    - không gọi delete thì ct vẫn chạy bt.
    - chỉ bị lỗi khi delete[] test[i] với i =0.
    - khi mảng 2 chiều chỉ có 1 phần tử thì delete[] test[0] vẫn
    hoạt động bt.


    Nhờ mọi người kiểm tra giúp xem lỗi này là gì và xử lý như thế nào vậy!

    :shot::shot::surrender:

    UPDATE : lỗi đã được giải quyết, chỉ là sai cú pháp mảng 2d dẫn tới delete bậy bạ :shot:
    Last edited by 13520230; 07-09-2014, 11:32.

  • #2
    Bạn nên ghi lại code đã sửa để những bạn khác có bị tương tự sẽ tự sửa được nhé
    Khi ta chào đời, ta khóc mọi người cười
    Sống sao để khi chết đi ta cười còn mọi người khóc.


    Cuộc đời chỉ đáng sống khi còn bạn bè, người thân và quan trọng nhất là ta còn có thể đem lại niềm vui cho người khác

    Comment


    • #3
      Code:
      test[0][i]=0;
      thay bằng
      Code:
      test[i][0]=0;
      3422A Trịnh Quang Nghị, F7, Q8
      0938952106 - 0963952106
      Page bán phụ kiện điện thoại, pc giá rẻ

      Comment

      LHQC

      Collapse
      Working...
      X