C\C++ でロックレス キューを作成しています。キューは正常に動作していますが、エラーが発生します。Visual Studio はそれがフリー オペレーションであることを示し、この関数でクラッシュします。
extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer( const void * pUserData)
そして、これは、多くの読み取りスレッド (free を使用するスレッド) がある場合に発生します。free を削除すると、任意の数のスレッドで正常に動作するか、単純な printf("random stuff"); (明らかに少し遅くなります)スレッドの数に関係なく正常に動作します。だから私は何をすべきかわからない:(多くのスレッドがメモリウィンドウを解放しようとすると、それを処理できないように見えます。これが問題になる可能性がありますか?また、変数アドレスが「魔法」になると、アクセス違反が発生します(0xABABABAB、0xCDCDCDCD..)、これらもヒープに関連していることがわかりました..
Linux では、Posix スレッドには問題がなく、任意の数のスレッドで問題なく動作します。
では、なぜスレッドを遅くすると効果があるのか (またはこれは偶然なのですか?)、速度を落とさずにヒープの問題を解決するにはどうすればよいのでしょうか? ヒープメモリに関するアドバイスは大歓迎です。