Lua C API:插入表元素会导致Debug Assertion失败

时间:2013-08-12 14:53:56

标签: c++ lua lua-api

函数返回成功,我可以使用表中的值,但错误“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); i == 1

时,断言显示失败

由于没有解决方案可以解决我的问题,我将尝试描述它的作用以及这两种情况下的输出结果。我只想从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;

输出:

  

一个   乙   C   d   !!! debug assertion failed !!!

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

int i = 0;

输出:

  

乙   C   d   没有错误...

1 个答案:

答案 0 :(得分: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);
}