2 차원 배열을 출력하고 바이너리로 입력하려고합니다.이진 데이터 출력 및 입력 C
내 이차원 배열하기 구조
typedef struct matrep {
unsigned rows, columns;
double *data;
} MATRIX;
내에 포함되고, I 출력 다음 함수를 전체 구조
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->columns
은 입력과 printf
기능을 사용하여 제대로 출력하지만, 코드에 줄을
*(tempptr++)=value;
에 도달 할 때 나는 내 포인터를 혼동하고있어 하더군요 세그먼트 오류가 발생 된 둘. 필자는 파일을 성공적으로 출력하고 fprintf 및 fscanf를 입력하여 함수 밖에서 파일을 닫거나 조작하는 데 문제가 있다고 생각하지 않습니다.
아무도 내 포인터를 정렬 할 수 있습니까?
감사합니다 아주 많이, 나는 메모리를 할당하지 않은 것을 깨닫지 못했다. 그러나 내가 "MATRIX * ptr = malloc (sizeof (MATRIX)); 줄에서 'void *'에서 'MATRIX *'로의 잘못된 변환, 및 "ptr-> data = malloc (sizeof (double) * ptr-> rows * ptr-> columns) 행에서 'void *'에서 'double *'으로 변환 할 수 없습니다. – Leavenotrace
나는 당신이 C를 쓰고 있다고 말한 줄 알았는데, 거짓말을 했음에 틀림 없다. :-) (당신이 쓰고있는 언어가 무엇인지 명확히 밝히는 것이 중요합니다. C++에서는 전체 코드가 끔찍하고 완전히 다른 것을했을 것입니다.) –
정말 죄송 합니다만, 아프게 되겠지만, 변경 사항을 제안했습니다. 프로그램은 여전히 세분화 오류로 인해 종료됩니다. – Leavenotrace