BSTR bstrRtf = 0xcccccccccccccccc <调试时错误 Ptr>( = CXX0030:错误:无法计算表达式)

BSTR bstrRtf = 0xcccccccccccccccc <Bad Ptr> on debugging ( = CXX0030: Error: expression cannot be evaluated)

本文关键字:错误 bstrRtf 表达式 CXX0030 计算 gt 调试 lt BSTR 0xcccccccccccccccc Ptr      更新时间:2023-10-16

我使用IXLMDOMDocument从使用的流中加载xml文件

IXMLDOMDocument *pDomDoc = pDomDoc->load(vtHtmlSource, &vfSuccess);

加载流(包含xml内容)后,它会创建一个样式表,以便正确地获取内容ident。以上部分工作正常,没有任何问题。我确信这一点,但在那之后,当一个转换节点(样式表到bstrRtf)通过如下操作-时

BSTR bstrRtf;
hr  = pDomDoc->transformNode(m_pStyleSheetNode, &bstrRtf);
//on debugging we get m_pStyleSheetNode = 0x0000000002b77ba8 that means it is correct and stylesheet is created properly.
//but bstrRtf = 0xcccccccccccccccc <Bad Ptr>  = CXX0030: Error: expression cannot be evaluated 
//that means there is some problem here
if (hr) {
    hr = HRESULT_FROM_WIN32(GetLastError()); //this hr surprisingly returns OK(hr = S_OK)
}; 

我不知道为什么,也不知道怎么做。它不应该这样做,因为在bstrRtf中,我们有一个非常奇怪的值。我希望它会给出一些错误,但我不知道为什么会这样

有人能解释一下bstrRtf = 0xcccccccccccccccc <Bad Ptr>的含义吗?什么时候会有人出现这种错误?0xcccccccccccccccc <Bad Ptr>的含义是什么?

当我用零初始化它时,调试时的错误是instance->m_bstrRtf = 0x0000000000000000 <Bad Ptr>。并且不起作用。但为什么在这之后它仍然返回S_OK??

bstrRtf未初始化-它还没有有效值。0xcccccccccccccccc的实际值是MS在内存中填充的值,因此可以检测未初始化的变量。

这个值是专门挑选的,这样它就"不是一个有效的内存地址"——这样,你就不会意外或故意使用未初始化变量的内存而不会出现某种错误或陷阱。