Сегментация C ++, только внешняя по отношению к Eclipse - PullRequest
0 голосов
/ 18 июня 2011

Я разработал приложение на C ++ в Eclipse. При запуске вне Eclipse происходит ошибка сегментации после согласованного количества (4) действий пользователя. Сначала это не казалось чем-то особенным. Я думал, что просто использую Eclipse для отладки приложения и поиска ошибки. Однако когда я запускаю приложение из Eclipse, оно работает просто отлично. У кого-нибудь есть рекомендации по устранению этой проблемы ??

Спасибо.

База кода слишком велика для отображения здесь, но я сузил строку кода, которая вызывает ошибку сегментации:

SDL_Surface* textSurface = TTF_RenderText_Solid( font, text.c_str(), color );

Странный момент в том, что он вызывает эту строку кода сотни раз, прежде чем терпит неудачу при одном и том же вызове. Значения шрифта и цвета являются константами, определенными в другом месте и передаваемыми каждый раз. Так что они одинаковы каждый раз. Значение текста "-".

Ответы [ 2 ]

1 голос
/ 18 июня 2011

Сначала убедитесь, что вы используете ту же версию в eclipse, что и в выпуске командной строки, против отладки.

Некоторые ошибки будут меняться из-за различных настроек компилятора или просто из-за отладки.Они часто вызваны неинициализированными данными.Инструменты отладчика памяти, такие как valgrind, могут помочь вам найти такие проблемы, поскольку они могут рандомизировать содержимое неинициализированных данных.

Также убедитесь, что все предупреждения включены в настройках компиляции.Затем компилятор предупредит вас о потенциально неправильных вещах.

Редактировать: Да -Wall и -pedantic хороши для получения всех предупреждений.

Иногда с трудными для поиска ошибками памяти ошибка фактически не там, где происходит ошибка.Segfault происходит только из-за более ранних ошибок, которые остались незамеченными.Лучше всего использовать отладчик памяти, такой как valgrind.В противном случае вам придется внимательно изучить код.

0 голосов
/ 25 июня 2011

По рекомендации узла (см. Комментарии к исходному вопросу, я запустил свое приложение через Valgrind. После устранения проблем с управлением памятью, выявленных Valgrind, моя проблема исчезла. Спасибо!

...