Во-первых, я объявлять переменные перед основной функцией():Переходя с плавающей точкой * и FILE * в/из функций в C
// Files
FILE *density_model_file;
char *density_model_filename;
float *density_array;
Далее я открыть файл * для чтения и выделения памяти для массива плотности :
density_model_file = open4read(density_model_filename, program_name);
density_array = allocator(density_model_size, sizeof(float));
До этого момента отладчик показывает, что все работает нормально. Здесь шаг, который я не могу исправить, где я пытаюсь загрузить данных в calloc'd массива:
density_array = floatfromfile(sizeof(float), density_model_size, density_model_file, density_model_filename);
density_array имеет значение NULL после этого шага по некоторым причинам. Вот код этой функции (содержится в отдельном .c файле). я жирный шрифт части, где я думаю, что проблема существует:
float * floatfromfile(unsigned long int entrysize, int numentries, FILE *inputfile, const char *filename)
{
/* Declaration of density model array size variable */
int numbytes;
**void *temparray = 0;
/* Writes the gravity model to file */
numbytes = (int)fread(temparray, entrysize, numentries, inputfile);**
/* Checks that the forward model file has a sufficient number of entries */
if (numbytes == numentries)
{
printf("loaded %i values from %s using fread()\n", numbytes, filename);
return((float *)temparray);
}
else
{
printf("ERROR: %i data points read from %s of %i needed\n", numbytes, filename, numentries);
return((float *)temparray);
}
}
Любого понимание будет высоко ценится. Я думаю, проблема может заключаться в том, что calloc() возвращает указатель на массив void. При необходимости я могу предоставить другие функции.
Bolding не работает внутри кодовых блоков. Вы можете пометить эти строки по-разному, например. с комментариями. – danfuzz