C语言——关于free函数的笔记
通过mallo()函数来动态申请内存空间,并通过指针指向该空间地址以便对齐操作。当需要清理掉该内存所存的内容时,可以用free()函数来操作。
free(指针)不是说把该指针空间释放掉,而是把该指针所指向的地址内存空间释放掉,原先在该空间定义存的内容,会被清掉,但该指针仍然在那。指针在此的作用是为了方便对申请的地址操作的路标。
问:当2个或3个指针指向同一个内存空间,并通过一个指针对该内存空间赋值,然后再通过一个指针用free函数释放掉该空间,其它指针指向的该空间所存的值也会改变吗?
代码:
#include <stdio.h>
#include <stdlib.h>
typedef int* Point;
int main(void)
{
//创建指针指向一个申请的空间
Point p1,p2,p3;
p1 = (Point)malloc(sizeof(int));
//让p2、p3指针也只向p1指向的地址
p2 = p1;
p3 = p1;
printf("p1=%p,p2=%p,p3=%p,*p1=%d,*p2=%d,*p3=%d\n",p1,p2,p3,*p1,*p2,*p3);
//通过p1更改数值
*p1 = 114514;
printf("p1=%p,p2=%p,p3=%p,*p1=%d,*p2=%d,*p3=%d\n",p1,p2,p3,*p1,*p2,*p3);
//free掉p1指向的空间
free(p1);
printf("p1=%p,p2=%p,p3=%p,*p1=%d,*p2=%d,*p3=%d\n",p1,p2,p3,*p1,*p2,*p3);
return 0;
}
由运行结果得出,指向同一个内存空间的指针,当其中一个指针改变了该内存空间存的数值,其它同样指向该内存空间的指针所得出的数值也一样,因为它们就是指向同一块地方。所以当通过一个指针去free释放掉内存空间,原本定义存在改地址的数值也就没有了。但这几个指针仍然指向该地址,只是所存的原本内容没有了。