Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Lua C API:插入表元素导致调试断言失败_C++_Lua_Lua Api - Fatal编程技术网

C++ Lua C API:插入表元素导致调试断言失败

C++ Lua C API:插入表元素导致调试断言失败,c++,lua,lua-api,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(iDo

函数成功返回,我可以使用表中的值,但出现错误“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>
问题:

int i=1

输出:

A B C D !!!调试断言失败

------------------------------------------------------ int i=0

输出:

B C D 没有错误


你确定你的代码中没有错误吗

我刚刚检查了这个解决方案,它似乎工作了,代码打印了它刚刚创建的表:

#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);
}
#包括
#包括
静态int fun(lua_State*L)
{
int i;
新表(L);
对于(i=0;i<10;i++)
{
lua_推进管柱(L,“A”);
卢厄·罗塞蒂(L,-2,i);
}
lua_setglobal(L,“t”);
返回1;
}
int main()
{
lua_State*L=luaL_newstate();
luaL_openlibs(L);
乐趣(L);
if(luaL_dostring(L,“对于ipairs(t)中的k,v,不打印(k,v);结束;\n”))
printf(“%s\n”,luaL_校验字符串(L,-1));
卢厄关闭(L);
}

如果它在
for
循环中,是Lua API的错误吗?@deepspace你说它忘记最后一个元素是什么意思?循环在节点元素上迭代的方式不依赖于i。您的意思是第一个元素似乎丢失了,因为它被插入到
t[0]=e->GetText()
?为了帮助调试,可以让它为所有元素推送一个伪字符串吗?例如,类似于lua_pushstring(L,“blah foobar”)并注释掉lua_pushstring(L,e->GetText())在第二种情况下,尝试成对迭代,您应该可以看到所有元素。Lua的源代码中没有文本“debug assertion failed”。我建议您清理该主题,以免混淆其他主题。当我将索引设置为-3时,程序崩溃。在-2频道。我没有看到这里的问题。您是否尝试调试它以查看调用堆栈是什么以及lua堆栈是什么样子的?是的,我尝试过,问题在于lua_rawseti(L,-3,I);我说表在-2上。(这是下一个要执行的语句)这太疯狂了。当我将I变量设置为0时,它会像0、1、2、3那样运行,不会崩溃(它会忘记最后一个元素),但当它设置为1时,会打印所有元素,并显示断言失败。此示例:显示我应该从1开始。尝试用1初始化i var,您将看到。
#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);
}