1

ダーウィンでSTLportを実行すると、奇妙なクラッシュが発生します。(Mac以外では見たことがありませんが、i686とPowerPCの両方でまったく同じことがクラッシュします。)gdbでは次のようになります。

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: 13 at address: 0x0000000000000000
[Switching to process 21097]
0x000000010120f47c in stlp_std::__node_alloc_impl::_M_allocate ()

それはSTLportの設定かもしれませんが、Mac.hとMacOSX.hは機能がはるかに遅れているように見えることに気づきました。また、このメソッドを呼び出すだけでは発生しないため、何らかの競合状態である必要があることも知っています(暗黙的に呼び出されます)。クラッシュは主にシステムをプッシュしたときに発生し、多くの文字列処理を行う10個のスレッドを同時に実行します。

私が思いついた他の理論は、コンパイラフラグ(スクリプトの構成)とg ++ 4.2のバグに関係しています(4.4.3はまだMacになく、Objective-Cをサポートしているようです。リンクする必要があります)。

ヘルプ!!!:)

編集:私はあらゆる種類のことを行う単体テストを実行します。この問題は、システムをプッシュする10個のスレッドを開始したときに発生します。そしてそれは常にstd::string :: appendになり、最終的には_M_allocateになります。問題の原因となっているコードの降下ダンプを取得することすらできないので、私は何か悪いことをしていると思います。命令ポインタ0x000...000で実行しようとしているので、そうでしょうか?dynlibsはジャンプテーブルを備えたWindowsでDLLとして構築されていますか?そのようなジャンプテーブルが何らかの理由で上書きされた可能性がありますか?それはおそらくこの振る舞いを説明するでしょう。(コードは巨大です。他のアイデアが足りなくなった場合は、クラッシュする最小限のサンプルをここに投稿します。)

4

2 に答える 2

1

うーん.. STLPort は、必要に応じてプラットフォーム メモリを取得し、データ構造に内部的にプールするアロケータを使用します。

クラッシュがいつ発生したかを確認してください。実行中のスレッドに割り当てられたヒープは、割り当てが発生するのに十分です。割り当てが失敗した場合でも、このクラッシュが発生する可能性があります。

現在取り組んでいる構成での STL アロケータの粒度についてはわかりません。stl_config.h を確認してください。

于 2010-03-09T07:44:37.583 に答える
0

この問題は、私の場合、STLport のクラッシュにつながるメモリの上書きを引き起こす、無関係なクラッシュ バグによって引き起こされました。

于 2010-03-29T08:21:56.127 に答える