0

我正在使用 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();

然后用 , 创建一个 XML 文档docBuilder_,所以xmlDoc.getDocumentBuilder()(它只返回docBuilder_)应该返回一个有效的指针。

如果我将 gdb 附加到正在运行的进程,这是堆栈跟踪的前几行:

#0  0x0a2de894 in ?? ()
#1  0x0514f8d9 in amxalanc_1_6::XalanTransformer::doTransform () from /usr/lib/libamxalanc1_6.so

transform()方法使用简单的输出流,但是当我更改第一个参数时,它现在失败了。我已经使用文档构建器对象成功地创建了一个 XML 文档。任何想法为什么我会在 Xalan 代码中出现分段错误?

4

3 回答 3

2

我正在为 Xalan-C 1.11 的正式发布做准备。

您能否将您的问题发布到 XALANC 的 Apache Jira 以便可以跟踪此问题?

https://issues.apache.org/jira/browse/XALANC

我还有一个 Apache 提交者的网站

http://www.apache.org/~shathaway

感谢您发布到邮件列表

c-users@xalan.apache.org

此致 Steven J. Hathaway Xalan 文档项目

于 2012-10-03T17:15:39.107 回答
1

Xalan-C 的 1.6 版本已经过时了。最新的稳定版本是 1.10。升级解决了许多段故障指针修复。正在准备发布的新版本 1.11 解决了更多段错误指针修复。

如果这是新代码,您应该确保在进行任何有用的工作之前初始化您的 Xerces 和 Xalan 库。

http://xalan.apache.org/xalan-c/usagepatterns.html#xalan

此致
Steven J. Hathaway
Xalan 文档项目

于 2012-10-03T17:53:12.830 回答
0

问题是theXalanTransformer在另一个函数中初始化。构造它的唯一原因是使用docBuilder_. theXalanTransformer的析构函数将在该函数的末尾调用,并且*docBuilder_此时它也隐式销毁,因为*docBuilder_它是使用theXalanTransformer. 后来evalTransformer用来做改造,但*docBuilder_已经被销毁了。

我没有意识到*docBuilder_被摧毁时会theXalanTransformer被摧毁。当我在内存中保留theXalanTransformer足够长的时间以进行转换时,结果是成功的。我想使用一个XalanTransformer来创建 XML 文档并进行转换会更好。

于 2012-10-04T00:02:45.287 回答