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ự:
đ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:
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; }
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:
Comment