调试时BSTR bstrRtf = 0xcccccccccccccccc <bad ptr =“”>(= CXX0030:错误:表达式无法评估)</bad>

时间:2013-08-02 13:53:40

标签: c++ xslt xml-parsing bstr ixmldomdocument

我正在使用IXLMDOMDocument使用

从流中加载xml文件
IXMLDOMDocument *pDomDoc = pDomDoc->load(vtHtmlSource, &vfSuccess);

加载流(包含xml内容)后,它会创建一个样式表,以便正确获取内容ident。以上部分没有任何问题。我确信这一点,但在那之后A变换节点(样式表到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?

1 个答案:

答案 0 :(得分:2)

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

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