2012-05-03 40 views
0

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 
+1

ここで何が間違っているのかわかりません。ちょっと "r"だけでなく、おそらく "rb"を使うべきです。ホールド、 'file == NULL'ですか? –

+0

rをrbに置き換えても、問題に影響していないようです。ファイルはNULLではありません。 – Kurt

+0

万が一、データが 'const'として宣言されていますか?または、それはローカル変数で、ネストされた関数呼び出しやその他のローカル変数(大規模な配列/構造体)が多すぎるためスタックを使い果たしてしまっていますか? –

答えて

1

は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;))

+0

まだfreadでEXC_BAD_ACCESSエラーが発生しています。それ以上の研究をした後、私はそれが以前に推測されたように、イオスでのみ起こることを発見した。 – Kurt

+0

この回答は、削除された回答とまったく同じです。バッファが1次元配列であるか2次元配列であるかは完全に無関係です。 –

関連する問題