VS2008 debug assertion failed

没有昵称阿
阿里巴巴Java技术专家
博客专家认证
2012-06-25 04:18:53
我在编写一个程序的时候(是Qt、OpenGL、C++),前几天还运行得好好的,今天添加了一个小功能之后,也可以编译运行,结果也是对的。但是关闭窗口之后出现错误对话框,如下图:


http://my.csdn.net/my/album/detail/1192217

很苦恼啊!
有哪位大小以前遇到过这种错误的,能否告诉我一下造成这种错误的可能原因有哪些?

感激不尽!
...全文
1890 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
S0303828 2012-06-26
  • 打赏
  • 举报
回复
应该是关闭窗口时引用了无效的指针
赵4老师 2012-06-26
  • 打赏
  • 举报
回复
在call stack中往下逐行双击,直到找到你自己写的源代码中。
没有昵称阿 2012-06-26
  • 打赏
  • 举报
回复
真的不知道怎么插入图片了,只好贴出链接:
http://my.csdn.net/my/album/detail/1192681
没有昵称阿 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
[/Quote]

显示的调用堆栈是这样的:


双击定位到源代码就是上一楼我贴出来的~~
没有昵称阿 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

在call stack中往下逐行双击,直到找到你自己写的源代码中。
[/Quote]

不知道为什么,重新生成解决方案就可以了~~
这是为什么呢?
没有昵称阿 2012-06-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
[/Quote]

在debug模式下,我点击重试,光标定位到dbgheap.c:
/*
* If this ASSERT fails, a bad pointer has been passed in. It may be
* totally bogus, or it may have been allocated from another heap.
* The pointer MUST come from the 'local' heap.
*/
_ASSERTE(_CrtIsValidHeapPointer(pUserData));

/* get a pointer to memory block header */
pHead = pHdr(pUserData);

/* verify block type */
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));

/* if we didn't already check entire heap, at least check this object */
if (!(_crtDbgFlag & _CRTDBG_CHECK_ALWAYS_DF))
{
/* check no-mans-land gaps */
if (!CheckBytes(pHead->gap, _bNoMansLandFill, nNoMansLandSize))
{
if (pHead->szFileName)
{
_RPT5(_CRT_ERROR, "HEAP CORRUPTION DETECTED: before %hs block (#%d) at 0x%p.\n"
"CRT detected that the application wrote to memory before start of heap buffer.\n"
_ALLOCATION_FILE_LINENUM,
szBlockUseName[_BLOCK_TYPE(pHead->nBlockUse)],
pHead->lRequest,
(BYTE *) pbData(pHead),
pHead->szFileName,
pHead->nLine);
}
else
{
_RPT3(_CRT_ERROR, "HEAP CORRUPTION DETECTED: before %hs block (#%d) at 0x%p.\n"
"CRT detected that the application wrote to memory before start of heap buffer.\n",
szBlockUseName[_BLOCK_TYPE(pHead->nBlockUse)],
pHead->lRequest,
(BYTE *) pbData(pHead));
}
}
赵4老师 2012-06-25
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
ChrisLambert 2012-06-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:

在dll中分配的内存,你是不是在exe中释放了。。而且你可能都不清楚DLL中分配的细节


我在exe中释放了?那应该怎么修改呢?
[/Quote]

我也不确定你的问题啊,你又不贴代码。。
没有昵称阿 2012-06-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

在dll中分配的内存,你是不是在exe中释放了。。而且你可能都不清楚DLL中分配的细节
[/Quote]

我在exe中释放了?那应该怎么修改呢?
ChrisLambert 2012-06-25
  • 打赏
  • 举报
回复
在dll中分配的内存,你是不是在exe中释放了。。而且你可能都不清楚DLL中分配的细节

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧