使用Xalan转换文档时出现分段错误

时间:2012-10-03 05:10:17

标签: c++ xalan

我正在使用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代码中得到分段错误吗?

3 个答案:

答案 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文档并进行转换会更好。