vc++ 调试时出现Debug Assertion Failed!该怎么办?

Program:D\vctest\833\Debug\833.exeFile:afxwin2.inlLine:51... Program:D\vc test\833\Debug\833.exe
File:afxwin2.inl
Line:51
展开
 我来答
帐号已注销
2019-08-28 · TA获得超过11.9万个赞
知道小有建树答主
回答量:109
采纳率:0%
帮助的人:4.7万
展开全部

1、首先需要打开vc++,然后开始编写好程序源代码

2、在执行程序时弹出的错误警告对话框,这个就是错误的信息,然后按快捷键y,等待一会。

3、最后,此时使用delete就是删除一个不存在的指针,从而报错,如下效果就是可以了。

刺友互
高粉答主

2019-07-19 · 每个回答都超有意思的
知道答主
回答量:3979
采纳率:100%
帮助的人:72.9万
展开全部

1、先写出源代码。

2、下图是在执行程序时弹出的错误警告对话框,类似的情况很多,我在调试dll插件的时候也时常碰到,后来发现大多是指针引起的错误。

3、因为pDist指针是静态分配的内存,当程序运行完后,其内存自动释放,此时使用delete就是删除一个不存在的指针,从而报错,而实际上delete是与new搭配使用的。

4、如果在运行的过程中你想知道每个变量有没有赋值,都是什么值的话可以从下图中查看

5、在下图标红的位置处你可以看到自己究竟在哪些地方加了断点。不需要时可以勾选掉,那样程序就不会走进去了。

6、如果你在运行的过程中知道是哪个地方出错了不需要走下去了,就点击一下下面的按钮程序将自动退出debug模式。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
就烦条0o
2018-07-06 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46492
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
why755
2014-06-06 · TA获得超过311个赞
知道小有建树答主
回答量:624
采纳率:75%
帮助的人:346万
展开全部
窗口可能还没有创建.具体要看你的代码.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qiujiejia
推荐于2018-02-28 · TA获得超过500个赞
知道小有建树答主
回答量:304
采纳率:0%
帮助的人:249万
展开全部
对应50、51行为:
_AFXWIN_INLINE void CWnd::SetFont(CFont* pFont, BOOL bRedraw)
{ ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, WM_SETFONT, (WPARAM)pFont->GetSafeHandle(), bRedraw); }

ASSERT(::IsWindow(m_hWnd)); //表示 ::IsWindow(m_hWnd) 这个函数一定要返回true,否则就会弹出你这个对话框。这说明你这个CWnd类并不是一个有效的窗口。

ASSERT 对于检测代码的错误很重要,你应该学习并掌握,且在你自己的代码多用它。像这个例子,由于有ASSERT,你能够很快把程序的错误定位到“是由于你的CWnd类有问题” 。

一般ASSERT错误对话框出现后,按重试按钮 ,vs 会定位到错误的源代码 。这时需要观察“调用堆栈”(在调试模式下 按ALT+7 可以打开调用堆栈窗口),看看程序整个调用过程,是哪一步出错了导致现在的结果。

记住: ASSERT 和 调用堆栈 这2个工具 对于调试程序很重要。你的程序难免错误,这会帮你很快找到错误。希望你记住,去网上找找相关的知识。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式