私はこのコードで遊んでいました:
#include <stdlib.h>
#include <stdio.h>
void function(int *p){
free(p);
}
int main(){
int *i = calloc(3, sizeof(int));
function(i);
i[0] = 'a';
printf("%c\n", i[0]);
return 0;
}
エラーが発生することを期待していましたが、代わりに「a」が出力されました。「a」の割り当てが解除された場合、なぜ出力されるのでしょうか。main()の場合、function(int * p)で何が起こるかは効果がありますか?(可能であれば、その'p'ポインターに何が起こるかを説明してください)
同じ関数にこれら2つがあるとします。
int *a = malloc(...);
int *b = a;
どちらも同じメモリを指していますが、それを解放する必要がある場合は、両方を解放する必要がありますか、それとも一方だけを解放する必要がありますか?(可能であれば理由をもう一度説明してください)