#include <iostream>
int main(){
int *a;
a=(int *)malloc(sizeof(int)*10);
free (a);
return 0;
}
これでちゃんとfreeされてます?

それはいいとして、
int型ポインタ変数aはmalloc確保されたアドレスの先頭しか
わからないですよね?
終わりはここ!ってのはわからないはず?なのに、
なぜちゃんと解放してくれるのでしょうか?
どこかにここからここまで確保しましたっていう情報が
記録されてるのでしょうか?それとも・・・