2012-01-23 3 views
2

Я пытаюсь создать мое приложение с C++ вместо C для моего встроенного устройства на основе MIPS. Во-первых, у меня была проблема с ссылками, которую вы можете увидеть here. Эта проблема исправлена, и я смог успешно создать приложение. Теперь я хочу использовать класс std::vector. Мой код:Ошибка сегментации, вызванная использованием вектора

#include <vector> 
using namespace std; 

int main() { 
    vector<char> v; 
    v.push_back('s'); 

    return 0; 
} 

vector<char> v; Когда линия выполнена, на экране появляется сообщение Segment Fault. Для большего количества тестов я проверил оператора new, и он отлично работает. Я использую mipsel-elf-g++, чтобы создать мое приложение.

Что не так?

+5

Из вашего предыдущего вопроса кажется, что ваш компилятор на C++ довольно сломан. Если 'malloc' и' new' segfault при первом использовании, нет оснований думать, что 'std :: vector' не будет. http://stackoverflow.com/questions/8956979/segment-fault-caused-by-using-new-and-malloc – NPE

+0

Код кажется прекрасным. Если это segfaults, то, когда вы работаете, вы можете выделить некоторое пространство при объявлении 'vector'. то есть «вектор v (100);» и попробуйте. – iammilind

+0

@aix: проблема 'malloc' и' new' была исправлена, и теперь я могу использовать оба. В моем вопросе я упоминаю, что «я проверил новый оператор, и он отлично работает», чтобы подчеркнуть, что есть проблема с распределением памяти. –

ответ

1

Предполагаю, что у вас есть кросс-встроенная библиотека C++ для mips. Проверьте, была ли библиотека правильно построена и действительно настроена для ваших мам. Вы также можете загрузить исполняемый файл в gdb и посмотреть, где именно происходит авария. Я бы подумал, что это происходит где-то в libC++.

+0

Я начинающий программист, и я не знаю, как я могу перестроить библиотеку C++ для 'MIPS'. Я использую 'cygwin'. Что мне делать, чтобы перестроить библиотеку C++? –

+0

Ваш MIPS кросс-компилятор подходит для Cygwin? Убедитесь, что вы действительно используете правильный компилятор. Существуют различные производные MIPS, и костюм компилятора должен вписываться в спецификации вашего вашего MIPS. – boto

+0

Я использую компиляторы 'mipsel-elf-gcc' и' mipsel-elf-g ++', которые существуют в 'Cygwin'. Я не знаю, подходят ли они? –

2

Как отмечено в комментариях, ваш компилятор и/или его библиотека во время работы не работают. (Вы можете исключить ОС, так как цель «эльф» подразумевает, что вы не используете ОС на цели, и если она не существует, ее невозможно сломать.)

Вместо того, чтобы пытаться debug Cygwin's mipsel-elf-gcc, который, вероятно, будет старым и не проверенным, я бы предложил просто использовать другой компилятор. В частности, сборник Mentor Graphics «Sourcery CodeBench Lite Edition» из компилятора GCC и связанных с ним библиотек C и C++ доступен для бесплатной загрузки с http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ - он должен в основном работать как замена для компилятора Cygwin, который вы используете используя (включая правильную работу с путями Cygwin, хотя он номинально построен как «простой Windows» компилятор), с той разницей, что он был протестирован и проверен, чтобы действительно работать правильно.

[Отказ от ответственности: Я работаю на Mentor Graphics, поэтому не могу сказать, что я объективен, но мы много работаем над созданием этого компилятора, а MIPS заключает контракты с нами, чтобы сделать его доступным для мир бесплатно, поэтому у нас есть стимул, чтобы он работал правильно. Кроме того, если вы знакомы с компиляторами CodeSourcery «Sourcery G ++», «Sourcery CodeBench» - это новое имя для них, так как CodeSourcery является частью Mentor Graphics.]

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