我正在使用Xalan-C ++进行XSLT转换,我在这段代码中遇到了分段错误:
XalanTransformer evalTransformer;
evalTransformer.setUseValidation(false);
evalTransformer.transform(*(xmlDoc.getDocumentBuilder()), rule_, resultStream);
以前,我使用此代码初始化XalanDocumentBuilder:
// Create a XalanTransformer.
XalanTransformer theXalanTransformer;
// Get a document builder from the transformer...
docBuilder_ = theXalanTransformer.createDocumentBuilder();
然后使用docBuilder_
创建一个XML文档,因此xmlDoc.getDocumentBuilder()
(只返回docBuilder_
)应该返回一个有效的指针。
如果我将gdb附加到正在运行的进程,这是堆栈跟踪的前几行:
#0 0x0a2de894 in ?? ()
#1 0x0514f8d9 in amxalanc_1_6::XalanTransformer::doTransform () from /usr/lib/libamxalanc1_6.so
transform()
方法正在使用简单的输出流,但是当我更改第一个参数时,它现在失败了。我已经使用文档构建器对象来成功创建XML文档。有什么想法我会在Xalan代码中得到分段错误吗?
答案 0 :(得分:2)
我正准备正式发布Xalan-C 1.11。
您可以将问题发布到Apache Jira for XALANC,以便跟踪此问题吗?
https://issues.apache.org/jira/browse/XALANC
我还有一个Apache提交者的网站
http://www.apache.org/~shathaway
感谢您发布到邮件列表
c-users@xalan.apache.org
此致 史蒂芬J.海瑟薇 Xalan文档项目
答案 1 :(得分:1)
Xalan-C的第1.6节已经过时了。最新的稳定版本是1.10。 升级解决了许多段故障指针修复。 准备发布的新版本1.11有更多的段错误 指针修复已解决。
如果这是新代码,你应该确保你的Xerces和Xalan 在进行任何有用的工作之前,库都会被初始化。
http://xalan.apache.org/xalan-c/usagepatterns.html#xalan
此致
Steven J. Hathaway
Xalan文档项目
答案 2 :(得分:0)
问题是theXalanTransformer
在另一个函数中初始化。构建它的唯一原因是使用docBuilder_
在内存中创建XML文档。 theXalanTransformer
的析构函数将在该函数的末尾被调用,此时它也会隐式地销毁*docBuilder_
,因为*docBuilder_
是使用theXalanTransformer
创建的。稍后evalTransformer
用于进行转换,但*docBuilder_
已被销毁。
当*docBuilder_
被销毁时,我没有意识到theXalanTransformer
会被销毁。当我将theXalanTransformer
保留在内存中足够长的时间来进行转换时,结果是成功的。我想用一个XalanTransformer
来创建XML文档并进行转换会更好。