当我为调试Lua编译程序时,运行得很好,但为什么我要为发布版编译它,我得到了一个c0000005错误

When I compile my program for Debugging the Lua runs fine but why I compile it for release I get a c0000005 error

本文关键字:编译 错误 c0000005 一个 我要 编译程序 Lua 调试 运行 很好 为什么      更新时间:2023-10-16

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

但是,如果我通过双击文件夹中的Release文件来运行它,我会得到错误c0000005和lua52.dll.

我正在运行MicroSoft Visual C++2010学习版。

我一直在删除行,直到它开始工作,导致错误的行是。

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();
}

}

任何设置错误或如何修复的想法。

0xc0000005是内存冲突。事实上,它可以在调试中工作,这意味着许多可能的事情。

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

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

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

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

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

  • LUA_ERRRUN:运行时错误。

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

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

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