2次元配列を出力してバイナリに入力しようとしています。バイナリデータの出力と入力C
私の2次元配列は、次のような構造
typedef struct matrep {
unsigned rows, columns;
double *data;
} MATRIX;
内に含まれていると私は、全体の構造を入力する
void matrix_writebinary(MATRIX *mat,FILE *fp)
{
int a=mat->rows,b=mat->columns;
fwrite(&a,sizeof(int),1,fp);
fwrite(&b,sizeof(int),1,fp);
fwrite(mat->data,sizeof(double) * a * b,1,fp);
rewind(fp);
}
と、次の関数に出力する構造を次の関数を作成しました
MATRIX *matrix_readbinary(MATRIX *mat,FILE *fp)
{
MATRIX matrix;
MATRIX *ptr;
ptr=&matrix;
int a,b;
double *tempptr=ptr->data;
fread(&a,sizeof(int),1,fp);
fread(&b,sizeof(int),1,fp);
for (int i=0; i < a; i++)
{
for (int j=0; j < b; j++)
{
double value=0.0;
fread(&value,sizeof(double),1,fp);
*(tempptr++)=value;
}
}
rewind(fp);
matrix.rows=a;
matrix.columns=b;
return(ptr);
}
私はそれを確認しましたmat->rows
とmat->columns
は、両方の入力とprintf
機能を使用して、正しく出力されたが、それはコード内
*(tempptr++)=value;
ラインに到達したとき、私は私が私のポインタを混乱だと言われますセグメンテーションエラーを取得してきました。 私は、ファイルを十分に出力してfprintfとfscanfで入力したので、関数の外にあるファイルを閉じたり操作したりすることに問題はないと思います。
誰でも私の指針を整理するのに役立つでしょうか?
おかげで非常に多くを、あなたが作るセンスを言っているのか、私は私がメモリを割り当てられていなかったことを実現していませんでした。しかし、私が2つのエラーを取得する関数を試してみると、 "'void *'から 'MATRIX *'への 'MATRIX * ptr = malloc(sizeof(MATRIX)); "ptr-> data = malloc(sizeof(double)* ptr-> rows * ptr-> columns)行の 'void *'から 'double *'への無効な変換。 – Leavenotrace
私はあなたがCを書いていると言ったと思ったと思った。 :-)(あなたが書いている言語を明確に言うことが重要です.C++ではコード全体がひどく、私は全く違う何かをしたでしょう) –
本当に痛いのは残念ですが、プログラムはまだセグメンテーションエラーのためにシャットダウンします – Leavenotrace