Nvwa は、特にシミュレーターで、delete オペレーターのオーバーライドでの無料呼び出しでクラッシュし、次のエラーが発生します。
malloc: *** error for object [hexadecimal address]: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
2 に答える
0
ライブラリのビルドに使用するターゲットのコンパイル設定がすべてです。
Nvwa はプラットフォーム固有のマクロを使用して利用可能なスレッド ライブラリを認識するため、iOS では _PTHREADS が通常定義されていないため、NVWA_USE_CXX11_MUTEX を 1 に設定しないことで C++11 ミューテックスを許可しませんでした。 、C ++ 11ミューテックスの使用を許可するか、Nvwaコードを変更して_POSIX_THREADSマクロもチェックします...
「適切な」ミューテックスが絶対に必要な場所の1つは、リークを報告するために使用される割り当てリストの更新です(debug_new.cpp内) )。そこで同期しなければ、次の要素ポインタは最終的に解放されたメモリを指すようになり、use-after-free は時間の問題です。
于 2014-12-26T15:52:01.203 に答える