0

我将 LUA 用于 SDL 项目。我从这里 (http://sourceforge.net/projects/luabinaries/files/5.2/Windows%20Libraries/Dynamic/) (lua-5.2_Win32_dll10_lib.zip) 下载了预编译的 LIB 和 DLL 文件并将其合并到我的项目中。当我构建调试版本时,应用程序运行 100% 正常。当我将它设置为释放模式并按下 Visual Studio 中的播放按钮时,它也运行良好。

但是,如果我通过在文件夹中双击它来运行发布文件,我会得到错误 c0000005 与 lua52.dll。

我正在运行 Microsoft Visual C++ 2010 Express。

我经历了删除行,直到它开始工作并且导致错误的行是。

void aiBrainmanager::run(string holdData){

int errfunc = 0;
int s;
int s = luaL_loadstring(L, holdData.c_str());

if ( s==0 ) {
    s = lua_pcall(L, 0, LUA_MULTRET, errfunc);
}
if (errfunc !=0) {

}
if (s !=0) {

    aiBrainmanager::target->stopWorking();
}


}

知道什么设置错误或如何修复它。

4

1 回答 1

1

0xc0000005 是内存违规。它在调试中工作的事实意味着许多可能的事情。

  1. 内存没有被初始化或正确设置(在调试中它被初始化为 0),因此例如字符串被终止。
  2. 内存要求大于缓冲区允许的(在调试中可以填充)。
  3. 您的代码在调试中做的事情与编译不同(#if 等)

看看你的代码,我会看看:

为什么你检查错误然后什么都不做??????

if (errfunc !=0) { 
 // What happens in here??????
} 

lua_pcall 函数在成功的情况下返回 0 或以下错误代码之一(在 lua.h 中定义):

  • LUA_ERRRUN:运行时错误。

  • LUA_ERRMEM:内存分配错误。对于这样的错误,Lua 不会调用错误处理函数。

  • LUA_ERRERR:运行错误处理函数时出错

我想你会发现你得到了一个LUA_ERRMEM

于 2012-04-07T04:09:48.970 回答