C语言中,malloc 和 free的用法。解决方案

C语言中,malloc 和 free的用法。
[code=C/C++][/code]
int main()
{
  char *p1 = NULL;
  char *p2 = NULL;

  p1 = (char*)malloc(1024);
  p2 = p1;
  free(p2); //注意我是p2 :)
}

前两天一MM问我到底可不可以这样。我想了半天。

开始我想,char *p1,p2, 都是指针,表示个地址而已,既然
p2 = p1;

那么这么做一定没问题的。

free(p2); 就是 free(p1);

因为free是 是否 指针所指向的 空间嘛。

后来一想,不对啊, 地址是知道了, 但是 free多大呢?是不是 我当时分配的1024?

这么一考虑好像 free(p2);是不对滴。。

后来查文档,说 原来 malloc函数 会自动记录这个大小的。我们free的时候不用关心。

那么free(p2)用法到底对不对呢?
free(p2) 是不是 等于 free(p1), 使用free(p2),系统是不是知道需要释放的就是刚刚给p1分配的内存大小?

谢谢各位大虾~

------解决方案--------------------
free(p2),是对的,不过此后不能用p1了,因为p1指向的空间已经被释放了,系统知道需要释放的就是刚刚给p1分配
------解决方案--------------------
这样释放是正确的做法.
释放多少内存由C库自己记着, 不用担心.