今回質問したのはfreeするとヒープが破壊されてしまい何故破壊されてしまうのか分からず質問しました。
char型のポインタをmallocし、freeしたのですが、なぜかfreeできません。
どこが原因なのでしょうか?
#include "GLOVAL.h"
#define DATA 2;//データ数
#define BUF 45;//一行目のデータ
static struct DATABASE DataBase[DATA];//データベース
//データベース
void DataBase(){
FILE *fp; //csvファイル
char buff[BUF]; //空読み用
int i=-1; //ID
char csvFile[100]; //fgetsするため
char *Data1, *Data2, *Data3, *Data4, *Data5, *Data6;//数値に変換するのに使う
Data1 = (char *)malloc( sizeof( char ) );
Data2 = (char *)malloc( sizeof( char ) );
Data3 = (char *)malloc( sizeof( char ) );
Data4 = (char *)malloc( sizeof( char ) );
Data5 = (char *)malloc( sizeof( char ) );
Data6 = (char *)malloc( sizeof( char ) );
//----ファイルオープン----
fp = fopen( "DataBase.csv", "r" );
fgets( buff, sizeof( buff ), fp );//空読み
//ファイル読み込み
while( ( fgets( csvFile, sizeof( csvFile ), fp )) != NULL ){
i++;//ID
sscanf( Data_csv, "%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,]", DataBase[i].name,
Data1, Data2, Data3, Data4,
Data5, Data6 );
//変換
DataBase[i].Data1 = atof( Data1 );
DataBase[i].Data2 = atof( Data2 );
DataBase[i].Data3 = atof( Data3 );
DataBase[i].Data4 = atof( Data4 );
DataBase[i].Data5 = atof( Data5 );
DataBase[i].Data6 = atof( Data6 );
}
//-----ファイルクローズ------
fclose( fp );
//ここでヒープが破壊される
free( Data1 );
free( Data2 );
free( Data3 );
free( Data4 );
free( Data5 );
free( Data6 );
}
何度もデバッグしてみたところ、whileの中でfreeしても破壊されず、whileの外だと破壊されてしまいます。
なので、whileのどれかと思い、弄ってみると sscanfが原因だとわかりました。(sscanfの箇所をコメントにするとfreeできる)
しかし、このsscanfなぜ原因なのかがわかりません。
どこを直せば解決するでしょうか?