mallocを練習してメモリを解放しようとしましたが、このプログラムでfree()関数を実行すると無効なポインタに対してエラーが返されます。私が間違っていることを誰かに教えてもらえますか?

エラーは次のとおりです: * `のエラー。 / malloc1 “:free():無効なポインタ:0x000000000216c421 * 中止

そしてここに私のコードがあります:

include

include

int main(void){//古いファイルを開くFILE * old_file = fopen( “words.txt”、 “r”); if(old_file == NULL){ printf( “ファイルが見つかりません。”); return 1;}

//open a new file FILE* new_file = fopen("new_words.txt", "w"); if (new_file == NULL) { printf("Unable to create file."); return 2; } for (int i = 0; i < 21; i++) { char* storage = malloc(sizeof(char)); if (storage == NULL) { printf("Error."); return 3; } fread(&storage, sizeof(char), 1, old_file); fwrite(&storage, sizeof(char), 1, new_file); free(storage); } //close both files fclose(old_file); fclose(new_file); 

}

回答

問題はfread(&storage, sizeof(char), 1, old_file);にあります。この行は、読み取られたデータをポインタに直接格納し、mallocされたメモリのアドレスを上書きしています。ポインタに格納されているアドレスが指すメモリにデータを格納していません。free()呼び出しを実行すると、無効なアドレスを解放しようとします。また、mallocのメモリのアドレスが置き換えられているため、メモリリークが発生しています。fread()およびfwrite()から&を削除すると、機能します。

これで質問に答える場合は、チェックマークをクリックして同意してください。フォーラムのメンテナンスを続けましょう。 😉

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です