2012-04-07 6 views
0

私はSDLプロジェクトにLUAを使用しています。私はここ(http://sourceforge.net/projects/luabinaries/files/5.2/Windows%20Libraries/Dynamic/)(lua-5.2_Win32_dll10_lib.zip)からプリコンパイルされたLIBとDLLファイルをダウンロードし、プロジェクトに組み込んだ。私がデバッグビルドをビルドすると、アプリケーションは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ステートメントを追加すると、何が間違っているかを見ることができます。これにはデバッガを使用することもできますが、それに精通していない場合は、最適化されたコードのデバッグが難しい場合があります。 –

答えて

1

0xc0000005はメモリ違反です。それがデバッグで動作するという事実は、いくつかの可能なことを意味します。

  1. メモリが初期化されていないか、または正しく設定されていません(デバッグ時に0に初期化される)ので、たとえば文字列は終了します。
  2. メモリ要件は、(デバッグ時に埋め込むことができる)thバッファの許容範囲を超えています。あなたがエラーをチェックして、何もしていないのはなぜ

  3. あなたのコードがコンパイルよりも、デバッグ中に別の何か(の#ifなど)

私が見てしまうあなたのコードを見てをしているのですか? ????

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

関連する問題