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库自己记着, 不用担心.
[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库自己记着, 不用担心.