3

- - - - - - - - 编辑 - - - - - - - - - - - -

我抓住了错误的值进行比较, cdcdcdcd 来自其他地方。我仍然有我的方法在达到异常之前抛出异常,但我的问题出在其他地方,我希望有一种方法可以“取消发布”我原来的问题。谢谢您的帮助。

- - - - - - - - 编辑 - - - - - - - - - - - -

我有一个类(MyClass),我从某个第三方类继承(它又从直接显示类派生 - 如果这很重要,则来自 CBaseFilter)。我写了这段代码:

MyClass* val = NULL;
val = new MyClass(); // Create an instance of the class.

尝试进行方法调用会导致抛出异常。经过一番调查,我发现当我取消引用 val(val 本身似乎是有效的......像 0x0777fc90 之类的东西)时,它包含 0xcdcdcdcd。我环顾四周,似乎这可能表明内存已在堆上分配,但未初始化。

这意味着什么?!对 new 的调用如何成功(val != NULL),但内存还没有初始化到足以有一个指向它的指针?某些基类初始化是否可能出现问题?如果是这样 - 我在寻找什么?

4

1 回答 1

15

0xCDCDCDCD 是来自 C 运行时库内部的调试值。当您在调试版本中分配一块内存时,它会被初始化为这个虚假值,以期捕捉错误。0xCDCDCDCD 是非 NULL 并且永远不是有效的内存指针。

是否有一个 HRESULT 从 DirectShow 传递过来,您可以检查吗?

尝试调用 WINAPI 函数GetLastError()并查看显示的内容。

于 2011-11-26T00:37:30.367 回答