Этот оператор
real_number = (double *) realloc(real_number,sizeof(double)*2);
всегда выделяет память одного и того же размера, которая предназначена только для двух двойных чисел.
Так что этот цикл
for(i = 0 ; !feof(fp) ; ++i)
может вызывать неопределенноеповедение, когда i
больше 1
.
Кроме того, условие в цикле является неправильным, поскольку в этом выражении может произойти конец файла
fscanf(fp,"%lf",&(real_number[i]));
, а это не такпроверено.
Цикл может выглядеть, например, следующим образом
double *real_number = NULL;
double value;
size_t i = 0;
for ( ; fscanf( fp, "%lf", &value ) == 1; i++ )
{
double *tmp = realloc( real_number, ( i + 1 ) * sizeof( double ) );
if ( tmp == NULL ) break;
real_number = tmp;
real_number[i] = value;
}
В этом случае после цикла переменная i
будет содержать количество введенных двойных чисел.