0

ややこしい。私のプログラムは確実に機能していました。それから、急いでいくつかの変更を加えましたが、それらは機能せず、巻き戻し、プログラムを見せに行きましたが、機能しなくなりました。10分ごとに新しいコピーを作成しなかった私のせいです。しかし問題は、意味のない場所でプログラムがクラッシュすることです。

QDomElement Expense::toNode()
{
    QDomElement e=Entry::toNode(); //Entry is parent of Expense
    QString temp;
    //std::string getThis=e.nodeName().toStdString();
    temp=QString::fromStdString(Category); //Category is string field

    //e.hasAttribute("category"); //this works
    //e.setAttribute("ha","hi"); //this crashes program
    //e.setAttribute("category",temp); //this also crashes program
    return e;
}

急いでライブラリを修正したのではないかと思ったQDomElementのですが、新しく を作成してその属性を編集すれば、まったく問題ありません。次に、私のノードはまったくノードではないかもしれないと思いましたが、他の多くの機能を使用できます (たとえばe.hasAttribute)。設定できる属性の量に制限はありますか? エラーは何ですか?

それが役立つ場合:

QDomElement Entry::toNode()
{
    QDomDocument d("EzXpns");
    QDomElement e=d.createElement("entry");
    QString temp;
    temp=QString::fromStdString(Name);
    e.setAttribute("name",temp);
    temp=QString::fromStdString(to_string(static_cast<long double>(Amount)));
    e.setAttribute("amount",temp);
    temp=QString::fromStdString(to_string(static_cast<long long>(Date[0])));
    e.setAttribute("dateyear",temp);
    temp=QString::fromStdString(to_string(static_cast<long long>(Date[1])));
    e.setAttribute("datemonth",temp);
    temp=QString::fromStdString(to_string(static_cast<long long>(Date[2])));
    e.setAttribute("dateday",temp);
    temp=QString::fromStdString(Comment);
    e.setAttribute("comment",temp);
    return e;
}

編集:デバッグしようとすると、次のメッセージが表示されることを指定する必要がありました。

TestBuild.exe がブレークポイントをトリガーしました

それから

TestBuild.exe の 0x77d415de で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x13fb8ff8。

それから

TestBuild.exe の 0x77d3016e: 0x00000000: 操作は正常に完了しました。

Edit2: サンプル xml

<!DOCTYPE data>
<EzXpns>
  <account>
    <login name="b" password="1"/>
    <expHis>
      <entry comment="9" dateday="1" name="k" dateyear="0" amount="9" datemonth="1"/>
      <entry comment="9" dateday="1" name="b" dateyear="0" amount="9" datemonth="1"/>
      <entry comment="9" dateday="1" name="b" dateyear="0" amount="9" datemonth="1"/>
      <entry comment="9" dateday="1" name="b" dateyear="0" amount="9" datemonth="1"/>
      <entry comment="9" dateday="1" name="b" dateyear="0" amount="9" datemonth="1"/>
    </expHis>
    <incomeHis/>
  </account>
</EzXpns>
4

1 に答える 1

0

解決策はQtのドキュメントにありました。

新しい要素を作成する方法を見てください。私は を呼び出して作成していますがQDomDocument d("EzXpns");、これは間違いです。Qt では、QDomDocumentが破棄された後、すべての子ノードが削除されます。純粋な運だけで以前は機能していました。one を作成QDomDocumentしてから渡すと、問題が解決しました。

于 2013-04-15T08:34:11.173 に答える