У меня есть входной массив A, хранящийся в памяти, который используется для создания другого массива, намного большего B. Однако, поскольку B - это огромный массив, я не хочу хранить его в памяти, но сохранить его локально в файл (используя fwrite
). Для этого я вычисляю каждую итерацию строки i
th и добавляю ее в выходной файл. Таким образом, мне нужно хранить только одну строку за раз в памяти, и, в конце концов, создается выходной файл со всеми необходимыми мне данными.
Кажется, что выходной файл имеет правильный размер, учитывая количество предметов, из которых оно состоит. Тем не менее, когда я пытаюсь прочитать фрагменты из выходного файла, используя fread
(например, получить первые 2000 элементов), получаются только первые 23 элемента.
Это основная функция для создания выходной файл:
void exportCovMatrix(char *outputString, double *inputStdMatrix, int colDim, int rowDim) {
double *covRow = calloc(rowDim, sizeof(double));
int i, j, n;
FILE *output;
fclose(fopen(outputString, "w"));
output = fopen(outputString, "a");
assert(covRow != NULL);
assert(output != NULL);
for (i = 0; i < rowDim; i++) {
for (j = 0; j < rowDim; j++)
covRow[j] = dotProduct(&inputStdMatrix[i * colDim], &inputStdMatrix[j * colDim], colDim);
n = fwrite(covRow, sizeof(double), rowDim, output);
assert(n == rowDim);
}
fclose(output);
free(covRow);
}
Это еще одна функция, которая читает указанный выходной файл:
double *calculateNextB(char* inputString, double* row, int dim){
FILE* input = fopen(inputString, "r");
int i, j;
assert(input != NULL);
for(i = 0; i <= dim; i++){
j = fread(row, sizeof(double), dim, input);
printf("%d items were read.\n", j);
}
...
}
Буду признателен за любую помощь в решении этой проблемы. Спасибо!