也就是说,我需要找到一种方法来解决我的应用程序中的错误。
下面是错误发生的瞬间:
一旦我在CLion中按下F8,即跳转到下一条指令(
std::cout << callbacks << std::endl
)我得到以下错误:
在地址 0x7ffab6524452 遇到异常 0x80000003
Error 0x80000003
与EXCEPTION_BREAKPOINT有关,也就是说,我强制恢复执行,我得到以下错误:Exception 0xc0000005 encountered at address 0x7ffab6477b45: Access violation reading location 0xffffffffffffffff
我已经在我的应用程序中注释掉了所有的“删除”,值得一提的是,在这段抛出异常的代码段中,变量是在堆中创建的,即通过new操作符
有的时候运行很顺利,没有任何问题,但是重启应用程序,开始debug或者直接运行,这些错误时有发生
有时它会在执行后立即发生,有时会在第三次请求后发生。但可以肯定的是,虽然是零星的,但发生的频率非常高。
将变量从栈中移除到堆中,这是一种极端的做法。例如,我没有使用
int result = 5 + 5
return,而是使用了int* result = new int(5 + 5)
此测试应用于所有代码,即使如此问题仍然存在
禁用所有 Windows 安全设置(例如 ASLR 等(全部!))
链接 | 搜索词 |
---|---|
应用程序无法正常启动 | clion 限制 0xc0000005 |
进程已完成,退出代码为 -1073741819 (0xC0000005) C++ clion | 错误代码 0xc0000005 |
在其他几个具有不同搜索词的主题中
Iocp::Listener& Iocp::Listener::Start() {
auto loop = [](Iocp::Listener* listener){
do
{
ULONG_PTR compKey;
DWORD dwNumBytes;
LPOVERLAPPED lpOverlapped;
bool res = listener->manager.GetStatus(
&compKey,
&dwNumBytes,
&lpOverlapped,
INFINITE
);
if(!res)
switch (GetLastError()) {
case WAIT_IO_COMPLETION:
continue;
}
Callbacks* callbacks = CONTAINING_RECORD(lpOverlapped, Callbacks, overlapped);
std::cout << callbacks << std::endl;
//**ERRORR ABOVE!!**
std::cout << callbacks->onReply.get() << std::endl;
if(!res)
callbacks->onFail->Call();
else
callbacks->onReply->Call();
callbacks->onFinally->Call();
delete callbacks;
} while(!listener->stopped);
};
std::thread(loop, this).detach();
return *this;
}
我是一名互联网用户,希望通过创建用于学习目的的应用程序来满足我的爱好来学习 C++ 语言。
就是说,如果错误很明显,请帮助我并且已经补充说我正在使用谷歌翻译,我为我的英语道歉。