URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 5757
[ Назад ]

Исходное сообщение
"RE: [Си][linux]Segmentation fault - HELP PLZ"

Отправлено Prog , 19-Фев-01 04:01 
Некоторая программа открывает файл, в котором имеються записи , причем
каждая запись находиться на одной строке и состоит только из одного слова.
Затем считывает по очереди каждую, обрабатывает ее и помещает рузельтат
обраьотки в другой файл. Вот текст программы:

if ((list=fopen(in_file, "r")) == NULL)
    perror(in_file);
while (fgets(out, 100, list) != NULL)    {
    log=fopen(out_file, "a");
...
обработка;
запись в поток log
...

Все рботает нормально, но если подать слишком большой входной файл (200 Kb) то
программа завершается с Segmentation fault


Содержание

Сообщения в этом обсуждении
"RE: [Си][linux]Segmentation fault - HELP PLZ"
Отправлено stalker , 19-Фев-01 17:55 
я бы попробовал поставить O_SYNC на оба файла (для начала).
А дальше - по обстоятельствам...

"RE: [Си][linux]Segmentation fault - HELP PLZ"
Отправлено Sergey , 19-Фев-01 18:07 
poprobuy ispolzovat open,read,write

"RE: [Си][linux]Segmentation fault - HELP PLZ"
Отправлено Sergey Vlasov , 19-Фев-01 22:49 
Выходной файл открывается на каждом проходе по циклу, а закрывается ли? Если нет, то дескрипторы кончатся, fopen() вернет NULL, если проверки на него нет, как раз Segmentation fault и получится.

А вообще в таких случаях часто помогает gdb.


"RE: [Си][linux]Segmentation fault - HELP PLZ"
Отправлено Prog , 20-Фев-01 01:56 
Я все понял, проблема была в том что я объявил масив out как out[50] а в программе fgets(out, 100, list) - 100!