C++/CMake windows 中的退出代码 -(0xC0000005)

问题描述 投票:0回答:0

源码【CMake】windows环境在这里

(最小的,可复制的例子)


问题


我收到错误 0xC0000005,更准确地说,我发现了以下异常:0xc0000005 在地址 0x7ffab6477b45 遇到:访问冲突读取位置 0x00080036

也就是说,我需要找到一种方法来解决我的应用程序中的错误。

下面是错误发生的瞬间:

一旦我在CLion中按下F8,即跳转到下一条指令(

std::cout << callbacks << std::endl
)我得到以下错误: 在地址 0x7ffab6524452 遇到异常 0x80000003

备注


  1. Error 0x80000003
    EXCEPTION_BREAKPOINT有关,也就是说,我强制恢复执行,我得到以下错误:
    Exception 0xc0000005 encountered at address 0x7ffab6477b45: Access violation reading location 0xffffffffffffffff

  2. 我已经在我的应用程序中注释掉了所有的“删除”,值得一提的是,在这段抛出异常的代码段中,变量是在堆中创建的,即通过new操作符

  3. 有的时候运行很顺利,没有任何问题,但是重启应用程序,开始debug或者直接运行,这些错误时有发生

    有时它会在执行后立即发生,有时会在第三次请求后发生。但可以肯定的是,虽然是零星的,但发生的频率非常高。

已经尝试


  1. 将变量从栈中移除到堆中,这是一种极端的做法。例如,我没有使用

    int result = 5 + 5
    return,而是使用了
    int* result = new int(5 + 5)

    此测试应用于所有代码,即使如此问题仍然存在

  2. 禁用所有 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++ 语言。

就是说,如果错误很明显,请帮助我并且已经补充说我正在使用谷歌翻译,我为我的英语道歉。

c++ winapi cmake clang clion
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.