はじめまして、よろしくお願い致します。
VisualC++ 2005 ExpressEditionを使用しています。
---------------------------------------
1:data.datにデータの個数とデータを保存
2:fscanfでデータの個数を読み込み
3:必要なデータの個数分、メモリを確保
4:fscanfでデータを読み込む
----------------------------------------
という流れを作りたいと思っています。そこで、
-----------------------------------------
FILE* fp;
fp = fopen(data.dat, r);
if( !fp )
{ // 読み込めない場合の処理 }
// 読み込めた場合
char Data_Num; // データの個数
char* HData; // データ受け取り用
// データ個数受け取り
fscanf( fp, %d, &Data_Num );
// データの個数分、メモリ確保
HData = ( char* )malloc( sizeof( char ) * Data_Num );
// データの個数分、データを受け取る
for( i = 0; i < Data_Num; i++ )
{ fscanf( fp, %d, &HData[ i ] ); }
// ファイルクローズ
fclose( fp );
------------------------------------------------
で実行したところ、強制終了になってしまいました。
データを受け取るところで強制終了になります。
分かった原因は、データ個数を受け取る前までfpはファイルを指しているのですが、受け
取った後、fpがNULLになっています。
fcloseの前にfpがNULLになってしまう原因が
ごめんなさい、途中で送信してしまいました。
fcloseの前にfpがNULLになってしまう原因が分からないのですが、間違っている部分のご
指摘、よろしくお願い致します。
%dで読み込んでいるため,範囲外アクセスが起きています。
%dはint型へのポインタを要求しますから,根本的に未定義動作だったりしますが。
というわけで,一回int型引数に読み込んだ後,HDataに設定するようにしましょう。
YuO様、早速のご指摘有難うございます。
>>%dで読み込んでいるため,範囲外アクセスが起きています。
指摘されてはじめて気が付きました…。
Data_Num, HDataをint型に直したところ、解決しました。
こういった雑な部分からエラーが起こるのですね。
これから気をつけたいです。
本当に有難うございました。
すみません、解決しました。
[原因]
int型(%d)でファイルを読み込んでいるのに、受け取る型をint以外(char)にした
そのため範囲外アクセスが起き、fscanfの後にfpがNULLになってしまった
[解決法]
int型で受け取る