free() 関数を呼び出してメモリを解放しようとすると、正しく動作しません。これが私のコードです:
unsigned char *indata;
unsigned char *outdata;
int file_func(const char *filename) {
//some other variables
for(i=0;i < no_of_files;i++) {
indata = malloc(sizeof(unsigned char));
outdata = malloc(sizeof(unsigned char));
//counts the number of characters from filename
numCharacters = readfile(filename, indata);
/* perform some operation on indata and get outdata(size is same as indata)*/
writefile(filename, outdata); //writes outdata to filename
free(indata);
free(outdata);
}
}
上記のコードは、free() がランダムなガベージ値を indata と outdata に保存しているため (ダングリング ポインターになるため)、正しく機能しません。したがって、次のように同じポインターを再利用しているため、解放後にポインターを null に設定しようとしました。
free(indata);
indata = NULL;
free(outdata);
outdata = NULL;
それでも私のコードは次のようにクラッシュします:
ダブルフリーまたは破損 (アウト): 0x00000000025aa240 *
この問題を解決するにはどうすればよいですか、またはループで動的サイズのポインターを使用する他の方法はありますか。ありがとうございました。