1

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 *

この問題を解決するにはどうすればよいですか、またはループで動的サイズのポインターを使用する他の方法はありますか。ありがとうございました。

4

1 に答える 1