LINUX.ORG.RU

gcc. FILE *fp. Segmentation fault.


0

0

Программа со следующим кодом вываливается с ошибкой сегментирования

#include <stdio.h>

void initFile(FILE *);

int main(void)
{
        FILE *fp;
        initFile(fp);
        fclose(fp);

        return 0;
}

void initFile(FILE *fp)
{
        fp = fopen("data.txt", "r");
}

Компилируется и линкуется тихо; файл data.txt существует с полным доступом. При вызове ф-ции fopen() в ф-ции main() программа работает. В чем может быть проблема?


В чем может быть проблема?

в том, что ты передаёшь указатель по значению

jtootf ★★★★★ ()


#include <stdio.h>

void initFile(FILE **);

int main(void)
{
FILE *fp;
initFile(&fp);
fclose(fp);

return 0;
}

void initFile(FILE **fp)
{
fp = fopen(«data.txt», «r»);
}

надо передавать указатель на указатель в твоем случае

Skolotovich ★★★ ()

Hint: Подумай чему равно значение fp после вызова initFile в main.

kpanic ★★ ()

Не осилил работу с указателями? Не мучай себя! Твоя судьба быдкодить на жабе и шарпе!

anonymous ()

Для начала K&R почитать стоит.

anonymous ()
Ответ на: комментарий от anonymous

Покидать профессию его сутьба.
По сабжу, почему такие банальные темы не удаляются? Так люди ни чему не научатся вед. Надо не отвечать, а удалять тему с пометкой - читай стандарт или книку по изучаемому языку внимательно!
Это же девелопеменет раздел, а не раздел оказания помощи неосиляторам.
Помнится мне было в своё время стыдно задавать такие вопросы, хоть они и возникали.

ixrws ★★★ ()

Позор мне. Спасибо за помощь.

void ()
Ответ на: комментарий от ip1981

это же ЛОР ))) да и случай такой, что, по-моему, позволительно )

void ()

А по-моему красивше так:

FILE * initFile()
{
    FILE *fp;
    ...
    return fp;
}

ip1981 ☆☆ ()

Ворнинги включи. -Wall бы тебе сказало, что «8: предупреждение: ‘fp’ is used uninitialized in this function».

Впрочем, про то, что параметры в си передаются по значению надо знать.

legolegs ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.