【发布时间】:2013-06-26 13:03:46
【问题描述】:
我正在浏览Multiple Selection in a File Dialog 代码项目的文章, 此代码适用于 Visual Studio 2005,但是当我在 Visual Studio 2010 上运行它时,它给了我如下调试断言,
MultiSelect.exe 中 0x76f515de 处未处理的异常:0xC0000005: 访问冲突读取位置 0x00000020。
接下来,
int ret = CFileDialog::DoModal(); //**Point where assersion occures**
整个函数如下(注:-CFECFileDialog继承自CFileDialog)
int CFECFileDialog::DoModal()
{
if (Files)
{
delete[] Files;
Files = NULL;
delete[] Folder;
Folder = NULL;
}
int ret = CFileDialog::DoModal(); //**Point where assersion occures**
if (ret == IDCANCEL)
{
DWORD err = CommDlgExtendedError();
if (err == FNERR_BUFFERTOOSMALL/*0x3003*/ && Files)
ret = IDOK;
}
return ret;
}
我也向那篇文章的作者提问,但他没有回复。
【问题讨论】:
-
你需要学习如何调试这样的异常。查看调用堆栈以查看导致崩溃的代码是必要的第一步。
-
您确定您的
CFECFileDialog对象有效吗? -
@HansPassant 实际调试时把我扔进了程序集。所以没有机会一步一步调试。
-
@LuchianGrigore 是的,我确定,我的 CFECFileDialog 对象是有效的。
-
调用堆栈不显示程序集。它显示了导致问题的代码的踪迹。如果您不知道如何阅读,那么您当然应该将其放在您的问题中。
标签: c++ winapi visual-c++ mfc