c++ - BSTR bstrRtf = 0xcccccccccccccccc <Bad Ptr> 调试 ( = CXX0030 : Error: expression cannot be evaluated)

标签 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??

最佳答案

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

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

关于c++ - BSTR bstrRtf = 0xcccccccccccccccc <Bad Ptr> 调试 ( = CXX0030 : Error: expression cannot be evaluated),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18018644/

相关文章:

c++ - CUDA 中的 64 位 atomicAdd

c++ - 您可以将 LPTSTR 转换为 BSTR 吗?

java - 什么会导致 javax.xml.transform.Transformer.transform() 返回空字符串

java - Hadoop Mapreduce中的XML解析

java - XmlBeans 与 Digester 哪个更擅长处理巨大的 xml 文件?

objective-c - 在 NSXMLParser 中解析 xml

c++ - 常量表达式类型定义

c++ - 对函数指针的 const 引用

java - Java 8 上的 J2EE Mybatis Web 应用程序 - java.lang.RuntimeException : XPathFactory#newInstance

xslt - 逗号分隔的字符串解析 XSLT 到每个节点