当我为调试编译我的程序时,Lua 运行正常,但当我为发布编译它时,就会收到 c0000005 错误。

我正在一个SDL项目中使用LUA。我从这里(http://sourceforge.net/projects/luabinaries/files/5.2/Windows%20Libraries/Dynamic/)下载了预编译的LIB和DLL文件(lua-5.2\_Win32\_dll10\_lib.zip),并将其合并到了我的项目中。当我构建调试版本时,应用程序可以完美运行。当我将其设置为发布模式并在Visual Studio中按下播放按钮时,它也可以正常运行。

但是,如果我双击文件夹中的发布文件运行它,我会收到有关lua52.dll的c0000005错误。

我正在运行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();
}

}

有什么设置是错误的或如何解决它?

原文链接 https://stackoverflow.com/questions/10051614

点赞
stackoverflow用户30225
stackoverflow用户30225

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-07 04:09:48