【发布时间】:2009-10-11 09:59:27
【问题描述】:
根据 MSDN 规范,CloseHandle 在调试器下运行时,如果传递给它的句柄无效,则会引发异常。
因为我想要干净的代码,所以我插入了一些代码来捕捉它。但是,它不起作用,异常未被捕获。
#include <windows.h>
#include <tchar.h>
#include <exception>
/* omitted code */
CloseHandle(myHandle); // close the handle, the handle is now invalid
try {
success = CloseHandle(myHandle);
} catch (std::exception& e) {
_tprintf(TEXT("%s\n"), e.what());
} catch (...) {
_tprintf(TEXT("UNKNOWN\n"));
}
我从调试器中得到以下两个错误:
第一次机会异常:0xC0000008:指定的句柄无效。
未捕获的异常:0xC0000008:指定的句柄无效。
我认为第一次机会异常是正常的,因为它在 catch 语句应该得到它之前就被触发了。但是,未捕获的异常让我想知道这里到底出了什么问题。
【问题讨论】: