ファイルから整数ポインタへのポインタを読みたかった。
次のコードを使用してファイルに書き込みます。
FILE *fp;
int **myArray = NULL;
int i, j;
for(i = 0; i < 3; i++){
myArray = (int **)realloc(myArray, (i+1)*sizeof(int *));
for(j = 0; j < 4; j++){
myArray[i] = (int *)realloc(myArray[i], (j+1)*sizeof(int));
myArray[i][j] = i*j*10;
}
}
if((fp=fopen("test", "wb"))==NULL) {
printf("Cannot open file.\n");
}
if(fwrite(myArray, sizeof(int), 3*4, fp) != 12)
printf("File write error.");
fclose(fp);
次のコードを使用して読み取りを行っていますが、実行中にセグ フォールトが発生します。
FILE *fp;
int **myArray = NULL;
int i, j;
for(i = 0; i < 3; i++){
myArray = (int **)realloc(myArray, (i+1)*sizeof(int *));
for(j = 0; j < 4; j++){
myArray[i] = (int *)realloc(myArray[i], (j+1)*sizeof(int));
}
}
if((fp=fopen("test", "rb"))==NULL) {
printf("Cannot open file.\n");
}
if(fread(myArray, sizeof(int), 3*4, fp) != 12) {
if(feof(fp))
printf("Premature end of file.");
else
printf("File read error.");
}
for(i=0; i < 3; i++){
for(j = 0; j < 4; j++){
printf("%d\n", myArray[i][j]);
}
}
fclose(fp);
編集:より徹底的なデバッグで、fread
関数が割り当てられたメモリをmyArray
無効にしていることがわかりました。ここで私が間違っている可能性があることについてのアイデアはありますか?