2012-04-07 45 views
0

我正在使用LUA作爲SDL項目。我從這裏下載了預編譯的LIB和DLL文件(http://sourceforge.net/projects/luabinaries/files/5.2/Windows%20Libraries/Dynamic/)(lua-5.2_Win32_dll10_lib.zip),並將它合併到我的項目中。當我構建一個調試版本時,應用程序可以100%正常運行。當我將它設置爲釋放模式並在Visual Studio中按下播放按鈕時,它也可以正常運行。當我編譯我的程序進行調試時,Lua運行良好,但是爲什麼我編譯它用於發佈我得到一個c0000005錯誤

但是如果我通過在文件夾中雙擊運行釋放文件,我得到與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(); 
} 


} 

任何想法,設置錯誤或如何解決它。

+1

的信息實在是不夠的人猜測問題可能是什麼。在調試版本中,許多未初始化的變量可能會被設置爲0,而在發佈版本中,它們不會。我會首先檢查,並在問題出現的地方添加debug print/log語句,以便查看可能出錯的地方。您也可以使用調試器,但如果您不熟悉調試優化代碼可能很困難。 – 2012-04-07 04:10:03

回答

1

0xc0000005是內存違規。它在調試中起作用的事實意味着一些可能的事情。

  1. 內存未被初始化或正確設置(在調試中它被初始化爲0),因此字符串終止例如。
  2. 內存需求比th緩衝區允許的大(在調試時可以填充)。
  3. 你的代碼做一些調試不同於編譯(#如果等)

看你的代碼,我想看看:

你爲什麼錯誤檢查,然後什麼都不做? ????

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

lua_pcall function返回0在成功的情況下或 下列錯誤代碼中的一個(在lua.h定義):

  • LUA_ERRRUN:運行時錯誤。

  • LUA_ERRMEM:內存分配錯誤。對於這樣的錯誤,Lua不會調用錯誤處理函數。

  • LUA_ERRERR:錯誤運行時錯誤處理功能

我想你會發現你在這裏得到一個LUA_ERRMEM

+0

已解決。如果您在調試設置中在類的頭部定義了一個指針(在這種情況下爲變量lua_State * L),那麼當構造函數(在這種情況下調用aiBrainmanager :: aiBrainmanager時)指針不會被設置爲NULL,這觸發了我編寫的一些代碼來重新創建lua_State函數,因爲檢測到錯誤。在釋放模式下,指針被設置爲NULL,它停止了所有創建的lua_State,這是實際的問題。謝謝。 – user315684 2012-04-07 04:43:26

相關問題