Я сделал программу C, скомпилированную с помощью gcc, в сочетании с некоторыми сценариями bash, для воспроизведения музыки с использованием mpd / mpc из Интернета и USB.

Это работает хорошо.

Но иногда программа завершается через некоторое время с

xxxx segmentation fault

Где xxxx - это четырехзначное число.

Может кто-нибудь сказать мне, что это значит и как это исправить?

Благодарность !

Отредактировано: число перед сообщением является случайным, поэтому заменено на xxxx

0
Royce Pereira 30 Мар 2014 в 11:01
1
Где программа?
 – 
arunmoezhi
30 Мар 2014 в 11:34
Арун, я думал, будет конкретная ситуация, когда появится это сообщение? Как мне поделиться своими файлами? Загрузить в Dropbox и разместить здесь ссылку? Я должен указать, что у меня есть ЖК-дисплей и 5 клавиш, подключенных к GPIO Pi (в качестве пользовательского интерфейса).
 – 
Royce Pereira
30 Мар 2014 в 11:52
Похоже, что числа могут быть идентификатором процесса. Нет, это в значительной степени наиболее общее сообщение об ошибке, которое вы можете получить (возможно, помимо «ошибки шины», которая также вводит в заблуждение). Это означает, что ваша программа каким-то образом обращается к недействительной памяти. Обычно переменная-указатель в вашем коде не инициализирована или повреждена.
 – 
tripleee
30 Мар 2014 в 12:32
Любопытно, что при первом запуске не вылетает ... довольно долго работает до того, как вылетит. В любом случае, помимо чтения моего кода построчно, есть ли способ или инструмент, который может отловить эту ошибку? Спасибо.
 – 
Royce Pereira
30 Мар 2014 в 17:25

1 ответ

Лучший ответ

Я нашел причину проблемы, прочитав свой код.

Была внешняя программа, которую я регулярно вызывал с помощью функции popen.

Но я забыл добавить соответствующую функцию pclose!

Итак, через некоторое время было открыто слишком много файлов, и мое приложение было закрыто.

После исправления я оставил свое приложение запущенным на ночь, а утром оно все еще работало !.

Это был самый длинный пробег без сбоев.

Так что я считаю, что это было источником проблемы.

Изменить: прошло 24 часа, что мое приложение работало без сбоев, поэтому я должен отметить это как ответ.

0
Royce Pereira 1 Апр 2014 в 09:41