我需要找到影响Windows API的内存损坏错误 . 基本上,在运行程序一段时间后, CreateWindowEx
函数返回 NULL
句柄, GetLastError()
返回1407,这意味着"Cannot find window class" . 我检查了 lpClassName
参数,没关系,该类已经注册了 . 事实上,程序通常会创建该类的许多窗口,然后突然 CreateWindowEx
拒绝创建一个新窗口并给出错误1407.此程序上只有一个线程,我们确定在问题窗口类之后没有调用 UnregisterClass
已注册 .
我们怀疑我们的程序正在破坏某些 USER32
或其他Windows数据结构 . 但是使用Application Verifier和Visual Leak Detector for Visual C++运行它,没有发现泄漏或内存损坏 . 资源使用率也很低,Window句柄的数量永远不会超过2k,并且提交的内存永远不会超过50mb .
这让我想到了这个问题的 Headers :是否有一些Windows API或Windows配置选项可以按需或连续检查给定进程的Windows数据结构的状态?我已经在使用具有许多启用检查的Application Verifier,但它根本不会捕获任何错误 .
1 回答
我做了一个黑客,我在调用失败后对CreateWindowEx执行了一次新的调用,其参数完全相同 . 令我惊讶的是,第二次通话成功!也许这与一些时间问题有关 .