0
我想输出并输入二进制数组。输出和输入二进制数据C
我的二维阵列包含以下结构
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));'和“无效转换从'void *'到'double *'”在行ptr-> data = malloc(sizeof(double)* ptr-> rows * ptr-> columns); – Leavenotrace 2012-01-08 20:02:42
我以为你说你在写C,你一定是在说谎,因为你描述的是C++! :-)(清楚地说出你正在写的是哪种语言是很重要的。在C++中,整个代码很糟糕,我会做一些完全不同的事情。) – 2012-01-08 20:10:39
真的很抱歉成为一个痛苦,但做了修改后,程序仍然关闭,由于分段错误 – Leavenotrace 2012-01-08 20:12:59