0

SDLプロジェクトにLUAを使用しています。ここ(http://sourceforge.net/projects/luabinaries/files/5.2/Windows%20Libraries/Dynamic/)(lua-5.2_Win32_dll10_lib.zip)からプリコンパイルされたLIBおよびDLLファイルをダウンロードし、プロジェクトに組み込みました。デバッグビルドをビルドすると、アプリケーションは100%正常に実行されます。リリースモードに設定してVisualStudioの[再生]ボタンを押すと、正常に動作します。

しかし、フォルダ内でリリースファイルをダブルクリックして実行すると、lua52.dllでエラーc0000005が発生します。

MicroSoft Visual C ++2010Expressを実行しています。

動作を開始するまで行を削除しましたが、エラーの原因となった行は次のとおりです。

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関数は、成功した場合、または次のエラーコード(lua.hで定義)のいずれかが発生した場合に0を返します。

  • LUA_ERRRUN:ランタイムエラー。

  • LUA_ERRMEM:メモリ割り当てエラー。このようなエラーの場合、Luaはエラーハンドラー関数を呼び出しません。

  • LUA_ERRERR:エラーハンドラ関数の実行中にエラーが発生しました

LUA_ERRMEMを取得していることがわかると思います

于 2012-04-07T04:09:48.970 に答える