Двоичная (де) сериализация матрицы с использованием fwrite / fread не работает

Я пытаюсь написать / прочитать двойную матрицу в файл как двоичные данные но я не получаю правильные значения при чтении.

Я не уверен, что это правильная процедура, чтобы сделать это с матрицами.


Вот код, который я использую, чтобы написать это:

void writeMatrixToFileBin(double **myMatrix, int rows, int colums){
cout << "\nWritting matrix A to file as bin..\n";

FILE * pFile;
pFile = fopen ( matrixOutputName.c_str() , "wb" );
fwrite (myMatrix , sizeof(double) , colums*rows , pFile );
fclose (pFile);
}

Вот код, который я использую, чтобы прочитать его:

double** loadMatrixBin(){
double **A; //Our matrix

cout << "\nLoading matrix A from file as bin..\n";

//Initialize matrix array (too big to put on stack)
A = new double*[nRows];
for(int i=0; i<nRows; i++){
A[i] = new double[nColumns];
}

FILE * pFile;

pFile = fopen ( matrixFile.c_str() , "rb" );
if (pFile==NULL){
cout << "Error opening file for read matrix (BIN)";
}

// copy the file into the buffer:
fread (A,sizeof(double),nRows*nColumns,pFile);

// terminate
fclose (pFile);

return A;
}

1

Решение

Это не работает, потому что myMatrix это не одна непрерывная область памяти, это массив указателей. Вы должны написать (и загрузить) в цикле:

void writeMatrixToFileBin(double **myMatrix, int rows, int colums){
cout << "\nWritting matrix A to file as bin..\n";

FILE * pFile;
pFile = fopen ( matrixOutputName.c_str() , "wb" );

for (int i = 0; i < rows; i++)
fwrite (myMatrix[i] , sizeof(double) , colums , pFile );

fclose (pFile);
}

Похоже при чтении.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector