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-C1.11の公式リリースの準備をしています。

この問題を追跡できるように、問題をApache Jira for XALANCに投稿できますか?

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

ApacheコミッターのWebサイトもあります

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

メーリングリストに投稿していただきありがとうございます

c-users@xalan.apache.org

よろしくお願いいたします。StevenJ.HathawayXalanドキュメントプロジェクト

于 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

よろしくお願いいたします
。StevenJ.HathawayXalan
ドキュメントプロジェクト

于 2012-10-03T17:53:12.830 に答える
0

問題はtheXalanTransformer、別の関数で初期化されることです。これは、を使用してメモリ内にXMLドキュメントを作成するという唯一の理由で構築されていますdocBuilder_theXalanTransformerのデストラクタはその関数の最後に呼び出され、を使用して作成される*docBuilder_ため、この時点でも暗黙的に破棄されます。後で変換を行うために使用されますが、すでに破棄されています。*docBuilder_theXalanTransformerevalTransformer*docBuilder_

*docBuilder_が破壊されると破壊されるとは思いもしませんでしたtheXalanTransformertheXalanTransformer変換を実行するのに十分な時間メモリに保持すると、結果は成功しました。XalanTransformerXMLドキュメントを作成して変換を行うために1つを使用する方がさらに良いと思います。

于 2012-10-04T00:02:45.287 に答える