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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.