fread()を使用してバイナリファイルを構造体のリンクリストに変換するのに問題があります。
構造体:
struct MdbRec {
char name[16];
char msg[24];
};
関連コード:
FILE *file;
file = fopen( argv[1], "rb" );
struct List db;
initList(&db);
struct MdbRec *data = (struct MdbRec *)malloc(sizeof(struct MdbRec));
struct Node *last;
while( fread( data, 40, 1, file ) )
{
struct MdbRec *message = (struct MdbRec *)malloc(sizeof(struct MdbRec));
message = data;
if( !db.head )
{
last = addFront( &db, message );
db.head = last;
}
else
last = addAfter( &db, last, message );
if( fseek( file, 40, SEEK_CUR ) != 0)
break;
printf("read\n");
}
free(data);
removeAllNodes( &db );
addFront()とaddAfterは、データフィールドのスペースをmallocするリンクリスト構造のメソッドです。
Valgrindで実行すると、2つのメモリ割り当てが正常に行われていることがわかります。1つは明らかにデータ変数です。他の568バイトとそれは私には非常に混乱しています。Valgrindは、fread()を実行したときにエラーが発生したと言います。