我有一个多线程服务器应用程序,可以在第一个ca正常运行。 40秒(此时应用程序几乎只在等待传入数据包)。在这40秒之后,它突然崩溃,尽管没有任何变化,没有客户端连接,没有数据发送等。
我从Windows收到的崩溃报告是这样的:
Problem signature:
Problem Event Name: APPCRASH
Application Name: myapplicationname.exe
Application Version: 0.0.0.0
Application Timestamp: 508d2a0b
Fault Module Name: StackHash_58df
Fault Module Version: 6.1.7600.16385
Fault Module Timestamp: 4a5bdb3b
Exception Code: c0000374
Exception Offset: 000cdcbb
OS Version: 6.1.7600.2.0.0.256.48
Locale ID: 1031
Additional Information 1: 58df
Additional Information 2: 58df710f17985997dec7b600103e4fd6
Additional Information 3: bc2b
Additional Information 4: bc2b581ed6e84cb4442c19134e8081d3
我检查了可能的缓冲区溢出,内存泄漏,但事实并非如此(至少我没有注意到)。
除此之外,令我更加困惑的是,如果我将其编译并在Visual Studio(本地Windows调试器)中运行,则不会发生此错误,不会崩溃,一切都会按预期进行。我不知道从哪里开始修复该问题,因为我从来没有遇到过这样的问题。
我知道没有代码很难诊断某些东西,但是代码太多了,我无法限制它,因为我什至不知道这个错误的含义和含义。我只是希望有人遇到类似的情况或知道此错误的含义。到目前为止,我只发现了如何解决其他程序的类似问题(重新安装该应用程序就是答案)。
胡乱猜测:
我有一个轮询循环,这给我的一个线程带来了很大压力,因为我没有意识到要实现整个代码。是否有可能为了保护我的CPU之一而调用DEP并停止我的应用程序? -增加了一个睡眠,但没有改变任何东西。
最佳答案
异常代码:c0000374
您会在ntstatus.h SDK头文件中找到这些异常代码:
//
// MessageId: STATUS_HEAP_CORRUPTION
//
// MessageText:
//
// A heap has been corrupted.
//
#define STATUS_HEAP_CORRUPTION ((NTSTATUS)0xC0000374L)
堆损坏当然是非常常见的C ++编程危害。如果找不到错误,请使用crtdbg.h中可用的调试分配器。