(私はまだ自分の質問に答えるのに十分な評判がないので、最初にここに置きます。投稿したときはまっすぐに考えていませんでした。私にとっては午前3時でしたが、私には思い浮かびませんでした。他の場所で問題を探してください。
表示する独自のメッセージを持つオブジェクトをluaに動的に追加する別の関数を作成していました。そして、それが私に問題を与えるものなので、静的にロードすると問題ありません。これは確かにコードの別の部分の問題でした。)
私はここでかなり奇妙な問題を抱えています
私のC++コードはlua(ブーストライブラリなし)で動作しているので、luaから変数などを取得でき、luaは登録済みのC関数を呼び出すことができます。
これで、関数の2つのバージョンがあります。1つはANSI用で、もう1つはUnicode(中国語)用です。ANSIバージョンは正常に動作しているようで、壊れることはありません。問題はUnicodeバージョンにあります。
ユニコードをANSI形式で解読できたので、それで問題ありません。問題は、それが数回正常に動作することですが、同じluaコードを複数回繰り返すと、プログラムがクラッシュします。それがluaスタックの問題なのか、単にメモリの問題なのかはまだわかりません。
これが最初にコードを与えるコードです、これは私がそれを絞り込んだものです
int l_showMSG(lua_State *l)
{
printf("showMSG::begin\n");
SDL_SemWait(msgLock);
char* fontname = (char*) lua_tostring(mainL,-1); lua_pop(mainL,1);
wchar_t* txt = (wchar_t *) lua_tostring(mainL,-1);
wstring msg = wstring(txt); //this is the code that breaks
lua_pop(mainL,1);
SDL_SemPost(msgLock);
printf("showMSG::done\n"); //it seens to get here or break in the line above depending on what I uncomment in my actual code o.o
return 0;
}
したがって、printfとテストを何時間も行った後、wstring msg = wstring(txt)がそれを壊す行であることがわかりました。
少なくともここではクラッシュしないwidestringstreamを使用して回避しました(ただし、widestringstreamを使用するには、他の関数を修正する必要がありますが、おそらく)
しかし、wstring msg = buf.str()// bufがストリームであるような行を追加するとすぐに、同じ問題が発生します。
だから私は疑問に思っています、それが起こっている理由は何でしょうか?Code :: Blocksでデバッグモードをオンにすると正常に動作しますが、明らかにそれは良い解決策ではありません。私はWindowsを使用しているので、Valgrindも使用できません。
前もって感謝します