【问题标题】:BSTR bstrRtf = 0xcccccccccccccccc <Bad Ptr> on debugging ( = CXX0030: Error: expression cannot be evaluated)BSTR bstrRtf = 0xcccccccccccccccc <Bad Ptr> 调试(= CXX0030:错误:无法评估表达式)
【发布时间】:2013-08-03 19:51:32
【问题描述】:

我正在使用 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 &lt;Bad Ptr&gt;是什么意思?什么时候有人会收到这种类型的错误? 0xcccccccccccccccc &lt;Bad Ptr&gt;是什么意思?

当我将其初始化为零时,调试时错误为instance-&gt;m_bstrRtf = 0x0000000000000000 &lt;Bad Ptr&gt;。并且不工作。但是为什么即使在这之后它仍然返回 S_OK 呢?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 所以你的意思是我只需要初始化它??
    • 当我用零初始化它时,调试时错误是 instance->m_bstrRtf = 0x0000000000000000 。并且不工作。但是为什么在这之后它仍然返回 S_OK 呢??
    • 我不完全确定。该文档似乎暗示pDomDoc-&gt;transformNode() 应该用分配填写bstrRtf。但它没有改变的事实似乎表明它没有改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2015-03-11
    • 2021-06-03
    • 1970-01-01
    相关资源
    最近更新 更多