在某些Lua/C++代码中发生了SIGSEGV错误。

以下代码会出现 SIGSEGV 错误:

extern "C" {
    #include "lua/lua.h"
    #include "lua/lualib.h"
    #include "lua/lauxlib.h"
}

int main( int argc, char *argv[] )
{
    lua_State *L;
    luaL_openlibs(L);
    lua_close(L);
    return 0;
}

Gdb 给出以下错误信息:

(gdb) run
Starting program: d:\Dropbox\cpp\engine\bin\main.exe
[New Thread 7008.0x1df8]

Program received signal SIGSEGV, Segmentation fault.
0x6d781f30 in lua_pushcclosure () from d:\Dropbox\cpp\engine\bin\lua52.dll
(gdb) where
#0  0x6d781f30 in lua_pushcclosure () from d:\Dropbox\cpp\engine\bin\lua52.dll
#1  0x6d79329e in luaL_requiref () from d:\Dropbox\cpp\engine\bin\lua52.dll
#2  0x6d79bdee in luaL_openlibs () from d:\Dropbox\cpp\engine\bin\lua52.dll
#3  0x004013a6 in main (argc=1, argv=0x702fc8) at main.cpp:10
(gdb)
点赞
用户1707560
用户1707560

在打开库( luaL_openlibs(L);)之前,您必须创建一个新的 Lua 状态,像这样:

L = luaL_newstate();

您会得到段错误,因为您有一个未初始化的指针,解引用它(这是库所做的)是未定义的行为。

2013-02-12 19:52:15