gpt4 book ai didi

c++ - CreateEventW 意外失败

转载 作者:太空狗 更新时间:2023-10-29 21:22:07 24 4
gpt4 key购买 nike

如果我写这样一个简单的代码:

int main(int argc, char* argv[])
{
HANDLE hEvent = CreateEventW( NULL, FALSE, FALSE, L"EVENTTEST" );
if (hEvent==NULL){
cout<<"Error "<<GetLastError();
}
else{
cout<<"Success";
}

getch();
return 0;
}

代码运行时显示成功消息,但如果我在 main 之上的一般范围内添加一些声明(此处我仅通过声明 bool 变量添加一行代码),函数 CreateEvenetW 将失败,错误代码为 998。如果我使用 CreateEvent 而不是 CreateEventW,则不会出现任何问题。但是我想知道当我添加一个像这样的简单变量声明时 CreateEventW 会发生什么:

bool x=true;
int main(int argc, char* argv[])
{
HANDLE hEvent = CreateEventW( NULL, FALSE, FALSE, L"EVENTTEST" );
if (hEvent==NULL){
cout<<"Error "<<GetLastError();
}
else{
cout<<"Success";
}

getch();
return 0;
}

这些奇怪的意外错误让我担心使用一些 winapi 函数。

我应该提到代码是用 Borland c++ 6 编译的

编辑:如果我在没有初始化的情况下声明变量(例如:bool x),则不会发生错误。此问题也只发生在某些数据类型上。我检查了类型(int、double)并且程序运行时显示“成功”消息。但是类型 (char,bool) 在初始化时会导致错误。

最佳答案

在 Windows 程序中出现错误 998 表明存在非常严重的问题。当内核本身可以判断进程堆已损坏时,您就会得到它。它通常是在程序未处于无法安全生成 AV 异常的状态时生成的,而不是因堆损坏而导致的正常访问冲突。当 Windows 加载程序忙于加载 DLL 并运行 DllMain() 入口点时,首先会发生这种情况。您的调试器显示第一次异常通知的可能性很大。无论如何希望。

您发布的代码当然不会得到此错误的重现,问题是由其他代码引起的。在 DLL 内部(最有可能)或在输入 main() 函数之前运行的初始化代码中。破坏堆当然是一个标准的 C++ 问题。您可能会从 Application Verifier 中找到帮助工具。祝你好运。

关于c++ - CreateEventW 意外失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21361275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com