関数に値でポインタを渡すと、次のように関数内でポインタを解放できないことが知られています。
void func(int *p)
{
free(p);
p = NULL;
}
pは(おそらく有効な)アドレスのコピーを保持しているので、free(p)はそれを解放しようとします。しかし、それはコピーであるため、実際にそれを解放することはできません。free()の呼び出しは、実際には解放できないことをどのようにして知るのでしょうか。
上記のコードはエラーを生成しません。つまり、free()は、引数として渡されたアドレスを処理できないことを「どういうわけか」知って、黙って失敗するということですか?