2017-06-07 8 views
-9
int f2(char* x, int f) { 
    int i=0; 
    free(x); 
    if(f) { 
     printf("%s", x); 
     return 1; 
    } 
    return 0; 
} 

int main(int argc, char argv) { 
    char* x = malloc(10); 
    return f2(x, argc); 
} 

解放されたポインタをprintfに渡しているのは、use-afterとみなされますか?このコードにはuse-after-freeが含まれていますか?

+2

無料使用の前に... bruh – Vivick

+0

@Stargateur Reference? –

+1

f2が定義されておらず、誤字でない場合は、最初のエラーがあります。 f1が呼び出された場合は、それは「フリー後に使用」です。 –

答えて

1

あなたは未定義の動作(その用語をグーグル)何回か買ってあげる:f2

  1. それが解放された後printf%s書式指定子でxをINGのため、あなたが、xを逆参照されますデリファレンスをx、つまりxが指すメモリにアクセスし、freeを呼び出した後、そのメモリの内容が不定になります。その後、あなたはprintfxをINGのしているためxが有効であるが非初期化されたメモリを指している間、あなたは​​を削除しても

  2. )は、あなたはまだ、未定義の動作を取得します。