1

関数は正常に戻り、テーブルの値を使用できますが、「Debug Assertion Failed」というエラーが表示されて終了します。assert の問題が for ループにあることは知っていますが、それを修正する方法が正確にはわかりません。前もって感謝します。

static int l_xmlNodeGetValues(lua_State *L)
{
  int iDocID = luaL_checkint(L, 1);
  const char *pszNodeName = luaL_checkstring(L, 2);

  CConfig *file = docs.at(iDocID);
  int i = 1;
  lua_newtable(L);
  for( TiXmlElement *e = file->GetRootElement()->FirstChildElement(pszNodeName);
       e; e = e->NextSiblingElement(pszNodeName) )
  {
      lua_pushstring(L, e->GetText());
      lua_rawseti(L,-2,i);
      i++;
  }
  return 1;
}

編集: int i; を設定すると 0 では機能しますが、最後の要素を忘れます。i == 1 ではないのはなぜですか?

lua_rawseti(L,-2,i); の場合、失敗したアサーションが表示されます。そして私== 1

私の問題を解決する解決策がないため、これら 2 つのケースで何が行われ、どのような出力が得られるかを説明しようと思います。xml ファイルで指定されたノードからすべての値を取得したいだけです。

<root>
    <node>A</node>
    <node>B</node>
    <node>C</node>
    <node>D</node>
</root>

スクリプトは次のようになります。

xmlfile = xmlOpenFile( "myfile.xml", "root" );
if ( xmlfile ) then
    for _, v in ipairs( xmlNodeGetValues( xmlfile, "node" ) ) do
        print( v );
    end
end

問題:

int i = 1;

出力:

A B C D !!!デバッグ アサーションが失敗しました!!!

-------------------------------------------------- ----

int i = 0;

出力:

B C D エラーなし...

4

1 に答える 1

2

コードにエラーがないと確信していますか?

このソリューションを確認したところ、うまくいくようです。コードは、作成したばかりのテーブルを出力します。

#include <lua.hpp>
#include <stdio.h>

static int fun(lua_State * L)
{
    int i;
    lua_newtable(L);
    for(i = 0; i < 10; i++ )
    {
        lua_pushstring(L, "A");
        lua_rawseti(L,-2,i);
    }

    lua_setglobal(L, "t");
    return 1;
}

int main()
{
    lua_State* L = luaL_newstate();
    luaL_openlibs(L);

    fun(L);

    if (luaL_dostring(L, "for k,v in ipairs(t) do print(k,v); end;\n"))
    printf("%s\n",luaL_checkstring(L, -1));

    lua_close(L);
}
于 2013-08-12T15:08:58.233 に答える