filedata を 2 次元配列にロードしようとしていますが、fread を呼び出すと、EXC_BAD_ACCESS エラーが発生します。
これは私が自分のファイルを読み取ろうとしている方法です:
char data[21][23];
FILE* file = fopen("1.txt", "r");
fread(data, 1, sizeof(data), file); // EXC_BAD_ACCESS
filedata を 2 次元配列にロードしようとしていますが、fread を呼び出すと、EXC_BAD_ACCESS エラーが発生します。
これは私が自分のファイルを読み取ろうとしている方法です:
char data[21][23];
FILE* file = fopen("1.txt", "r");
fread(data, 1, sizeof(data), file); // EXC_BAD_ACCESS
C では、2 次元配列 (nxm) は、サイズ m の n 個の配列への n 個のポインターの配列として表されます。
fread は、指定されたポインターが指すメモリー領域を読み取ります。
あなたの場合、 fread は n 個のポインターが格納されるはずの場所にデータを書き込みます。C の 2 次元配列に対して単純に fread() または類似のメソッドを使用することはできません。
代わりに、最初にサイズ m*n の 1 次元配列を読み取り、次に「行の先頭」へのポインターをポインターの配列にコピーします。
char tmp[21*23];
FILE* file = fopen("1.txt", "r");
fread(tmp, 1, sizeof(tmp), file);
char* data[21];
int i;
for(i = 0; i < sizeof(data)/sizeof(char*); i++) {
data[i] = &tmp[23*i];
}
更新: サンプル コードにエラーが含まれていました (64 ビット システムでは sizeof(data) を使用しましたが、これは目的の値の 8 倍を返し、別の EXC_BAD_ACCESS につながります;))