Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> segmentation fault 
:(
    Опции темы
box
Дата 16.2.2011, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

Репутация: нет
Всего: 0



получаю данные из потока :
Код


    FILE * m_pipe = popen("", "r");
    int m_size = 512;
    char buf[m_size + 1];
    int i;
    while (fgets(buf, m_size, m_pipe) != NULL)
    {

....................

     }



и бывает вылетает сег фаулт сразу после запуска а бывает через 5-7 минут.
как с этим бороться ?
PM MAIL   Вверх
alexvs11
Дата 16.2.2011, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: -1
Всего: 10



pipe вообще открылся, проверяли на 0?
PM MAIL   Вверх
box
Дата 16.2.2011, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

Репутация: нет
Всего: 0



вероятно да ибо данные поступают
PM MAIL   Вверх
alexvs11
Дата 16.2.2011, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: -1
Всего: 10



а какой вообще смысл несет ""?
PM MAIL   Вверх
maint
Дата 16.2.2011, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 12.5.2008

Репутация: нет
Всего: 2



бороться не надо. Надо проверять файловый дескриптор на NULL. Если NULL выдавать диагностику на ошибку. напимер strerror(errno) функцией
PM   Вверх
box
Дата 16.2.2011, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

Репутация: нет
Всего: 0



приведите пожалуйста  пример 
PM MAIL   Вверх
box
Дата 16.2.2011, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

Репутация: нет
Всего: 0



какой смысл проверять пайп на ноль если пайп открылся и данные из него пошли и через какоето время вылетает сег фаулт

сделал проверку на 0 всеравно через 15 минут вылетает ошибка 
PM MAIL   Вверх
xvr
Дата 16.2.2011, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



А на какой строке вылетает sigfault? Может пайп тут и не при чем?

PM MAIL   Вверх
maint
Дата 16.2.2011, 15:10 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 12.5.2008

Репутация: нет
Всего: 2



Код

if(аm_pipe == NULL){
 fprintf(stderr, "вот ошибка %s\n", strerror(errno));
 return 1;
}

NULL и 0 , разные вещи
PM   Вверх
box
Дата 16.2.2011, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

Репутация: нет
Всего: 0



вопрос решен , у меня было такое :
Код

..................
   input_string += string(buf);
..................

что в итоге вызывало переполнение буфера .
PM MAIL   Вверх
maint
Дата 16.2.2011, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 12.5.2008

Репутация: нет
Всего: 2



обычная невнимательность. Сам страдаю smile
дв, все же вам рекомендую делать проверку на ошибки, когда открываете файл. Нужно обязательно проверять на ошибку. Немного дольше рисовать, но это оправданно. Файл (устройство, пайп) надо проверять. Почитайте Кернигана. У него правильно сказано, каждая возможность ошибки без диагностки может привести самый лучший код в ничто. Я не точно цитирую. Поверьте программеру с 25 летним стажем ;)

Это сообщение отредактировал(а) maint - 16.2.2011, 15:53
PM   Вверх
volatile
Дата 17.2.2011, 00:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



Цитата(maint @  16.2.2011,  15:10 Найти цитируемый пост)
NULL и 0 , разные вещи 

 smile 

имхо не совсем разные. По крайней мере я не знаю случая, когда замена 0 на NULL привела бы к каким-то изменениям.
Цитата
В отличие от классического Си в C++ значение пустого указателя предопределено стандартом языка и всегда равно 0 (целочисленному нулю, приведённому к типу «указатель»). Поэтому в программах на C++ не только возможно, но и рекомендуется использовать значение 0 вместо NULL. ссылка

PM MAIL   Вверх
maint
Дата 17.2.2011, 09:23 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 12.5.2008

Репутация: нет
Всего: 2



Код

имхо не совсем разные. По крайней мере я не знаю случая, когда замена 0 на NULL привела бы к каким-то изменениям.

мальчик, по коду же видно что это чистый Си. Думать иногда надо 
PM   Вверх
borisbn
Дата 17.2.2011, 10:23 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



Цитата(maint @  17.2.2011,  09:23 Найти цитируемый пост)
мальчик, по коду же видно что это чистый Си.


и это тоже ?
Цитата(box @  16.2.2011,  15:28 Найти цитируемый пост)
input_string += string(buf);


и потом, что за обращение ? Не на вокзале находитесь.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1015 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.