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