По какой-то причине этот код является неполадки по причине, которую я не могу найти.Почему этот код segfault? (Арифметика указателя)
char *read_line(FILE *fp)
{
char *out;
int counter = 0;
char c = getc(fp);
while (c != '\n' && c != EOF)
{
*(out + counter) = c;
counter++;
c = getc(fp);
}
if (c == EOF || feof(fp))
{
return NULL;
}
*(out + counter) = '\0';
return out;
}
Я уже попытался запустить его в gdb
, и сказал мне, что это в выдаёт ошибку сегментации *(out + counter) = c;
. Я не могу понять, что я делаю неправильно, может ли кто-нибудь еще?
похоже char * out не инициализирован? –
Что бы инициализировать его? O.o – AppleDash
Если вы хотите прочитать данные где-то, вам необходимо предоставить память для этого. Поскольку код в настоящее время стоит 'out', это просто apointer в никуда. И писать туда, где он указывает, провоцирует неопределенное поведение и крушение. – alk