filedataを2次元配列にロードしようとしていますが、freadを呼び出すときにEXC_BAD_ACCESSエラーが発生します。ファイルデータを2次元配列に読み込むときに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エラーが発生します。ファイルデータを2次元配列に読み込むときにEXC_BAD_ACCESS
char data[21][23];
FILE* file = fopen("1.txt", "r");
fread(data, 1, sizeof(data), file); // EXC_BAD_ACCESS
はCで、2次元配列(n×m個)はサイズ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];
}
更新: 'ポインタのアレイにサンプルコードは、エラーを含んでいた(私はsizeof(データ)を使用し、64ビットシステムで、につながる、8回、所望の値を返すであろう、他のEXC_BAD_ACCESS;))
まだfreadでEXC_BAD_ACCESSエラーが発生しています。それ以上の研究をした後、私はそれが以前に推測されたように、イオスでのみ起こることを発見した。 – Kurt
この回答は、削除された回答とまったく同じです。バッファが1次元配列であるか2次元配列であるかは完全に無関係です。 –
ここで何が間違っているのかわかりません。ちょっと "r"だけでなく、おそらく "rb"を使うべきです。ホールド、 'file == NULL'ですか? –
rをrbに置き換えても、問題に影響していないようです。ファイルはNULLではありません。 – Kurt
万が一、データが 'const'として宣言されていますか?または、それはローカル変数で、ネストされた関数呼び出しやその他のローカル変数(大規模な配列/構造体)が多すぎるためスタックを使い果たしてしまっていますか? –