2010-03-05 5 views
1

Когда я запускаю STLport в Дарвине, я получаю странный сбой. (Не видели его в другом месте, чем на Mac, но точно то же самое аварии на обоих i686 и PowerPC.) Это то, что он выглядит в БГД:STLport авария (состояние гонки, только Дарвин?)

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 одновременных потоков, которые выполняют большую обработку строк.

Другие теории, которые я придумал, связаны с флагами компилятора (configure script) и g ++ 4.2 ошибками (похоже, что 4.4.3 не на Mac, но с поддержкой Objective-C, с которой мне нужно связать).

HELP !!! :)

Редактировать: Я запускаю модульные тесты, которые делают всевозможные вещи. Эта проблема возникает, когда я запускаю 10 потоков, которые подталкивают систему; и он всегда сводится к std :: string :: append, который в конечном итоге сводится к _M_allocate. Поскольку я даже не могу получить спуск сбрасывания кода, который вызывает проблему, я полагаю, что я делаю что-то плохое. Может быть так, так как он пытается выполнить с указателем инструкции 0x000 ... 000? Являются ли dynlibs построены как DLL в Windows с таблицей переходов? Может быть, почему-то такая таблица прыжка была переписана по какой-то причине? Вероятно, это объясняет это поведение. (Код огромен, если у меня заканчиваются другие идеи, я опубликую здесь минимальный образец сбой).

+2

Вы не можете «запустить» STLport - это библиотека - какой код C++ вы написали, что вызывает сбой? – 2010-03-05 14:36:05

+1

Что сказал Нил, но также стоит посмотреть, как/если код является потокобезопасным. –

ответ

0

Эта проблема была вызвана unrelated crash bug, в результате чего память перезаписывается, что приводит к сбою STLport в моем случае.

1

hmm .. В STLPort используются распределители, которые занимают память платформы и объединяют их внутри структур данных, когда это необходимо.

Просто проверьте, когда произошел сбой, куча, заданная исполнительному потоку, достаточна для того, чтобы распределение было выполнено. Даже если не удается выполнить вызов, этот сбой может произойти.

Я не уверен относительно детализации распределителя STL в текущей конфигурации, над которой вы работаете. Для этого проверьте stl_config.h.

+0

Я изучаю этот код, но на самом деле не понял, что могло пойти не так. Итак, вы говорите, что каждому потоку даются отдельные части кучи, которые никогда не перераспределяются, даже если они не имеют места? Звучит * чрезвычайно * подвержен ошибкам. Я посмотрю дальше. –

 Смежные вопросы

  • Нет связанных вопросов^_^