stl — Почему бы C ++ std vector segfault при присваивании или изменении размера?

Вот минимальный код, который вызовет ошибку сегментации.

#include<vector>
int main() {
std::vector<double> a;
a.resize(10);
return 0;
}

Очевидно, в этом коде нет ничего плохого. Я запустил его на нескольких системах без проблем, но он вызывает ошибку сегментации на моем рабочем компьютере.

Код компилируется с использованием g ++ file.cpp в системе, в которой работает openSUSE 11.1. Я знаю, что это более старая ОС, но мне не разрешено обновлять или переустанавливать. Единственное, для чего у меня есть разрешения — это zypper (утилита командной строки для установки и удаления программ).

Я предполагаю, что это как-то связано с библиотеками c ++. Я попытался переустановить все, что я могу придумать, связанные с gcc / g ++ и libstdc ++, но я все еще вижу ту же проблему.

Кто-нибудь видел что-то подобное раньше? Есть идеи?

Спасибо!

3

Решение

Где вы собрали и связали приложение? И с чем
опции? Если вы динамически связываете стандарт C ++
библиотека, вы можете легко столкнуться с проблемами; стандарт C ++
библиотека несколько раз менялась способами, которые нарушают бинарный
совместимость и двоичная совместимость могут зависеть от
опции компилятора. В общем, вы должны использовать
опции -static-libstdc++ при строительстве, чтобы избежать такого
проблемы. (Обратите внимание, что то же самое не верно для системы
библиотеки, где динамическое связывание является предпочтительным.)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]