Tôi gặp sự cố khi chạy một testcase trong chế độ gỡ lỗi: Tôi nhận được một hộp bật lên có thông báo "Ngoại lệ không đúng lúc 0x7c812fd3 trong Test.exe: 0xE0000003: 0xe0000003.". Mã ngắt trong free.c:C++ Ngoại lệ chưa xử lý - cách gỡ lỗi
void __cdecl _free_base (void * pBlock)
{
int retval = 0;
if (pBlock == NULL)
return;
RTCCALLBACK(_RTC_Free_hook, (pBlock, 0));
retval = HeapFree(_crtheap, 0, pBlock);
if (retval == 0)
{
errno = _get_errno_from_oserr(GetLastError());
}
}
tại dòng "retval = ..." with _crtheap = 0x00df0000 và pBlock = 0x967c93d3. Các cuộc gọi ngăn xếp phá vỡ tại "kernel32.dll! 7c812fd3()" và một mục khác tiếp tục xuống trong ngăn xếp cuộc gọi: "> msvcr100d.dll! _free_base (void * pBlock = 0x967c93d3) Dòng 50 + 0x13 byte".
Tôi đã googled khá một chút và vấn đề có thể đến từ giải phóng bộ nhớ severel lần. Mặc dù mô tả mơ hồ và lộn xộn này bất cứ ai có thể gợi ý cách xác định vấn đề? và có thể làm thế nào để sửa nó?
gì đập vào mắt tôi một chút kỳ lạ là tôi không kinh nghiệm này khi chạy thử nghiệm trong phiên bản chế độ ...
Trân trọng! Svend
Lý do thông thường cho lỗi chỉ chế độ gỡ lỗi là các biến chưa được khởi tạo. Có lẽ bạn đang giải phóng một con trỏ chưa bao giờ được đưa ra một giá trị. – john
Trong chế độ phát hành, các kiểm tra này không được thực hiện, do đó tại sao bạn chỉ nhận được thông báo trong chế độ gỡ lỗi (sự cố vẫn tồn tại trong bản phát hành, bạn sẽ gặp may khi không xuất hiện thêm bất kỳ lỗi nào). Đi lên theo dõi stack cho đến khi bạn nhận được một chức năng mà bạn đã viết, và cố gắng tìm ra những gì sai ở đó (ví dụ: miễn phí gấp đôi hoặc giải phóng một địa chỉ không thực sự được phân bổ). – Cameron
Bạn có thể cung cấp thêm một chút chi tiết không? Loại đối tượng nào đang được giải thoát? Có một con trỏ thông minh ví dụ –