详谈C语⾔指针:free(p)与p=null区别
常听⽼师讲“不懂指针,就不要告诉别⼈你会C语⾔”,指针是C语⾔中⼀个重要的组成,它灵活⾼效,⼜难以琢磨,只有经过细⼼琢磨和理解,⽅能⼀探它的魅⼒。
使⽤⼀个指针⾸先是需要给它分配适当的空间⼤⼩,在使⽤完以后当然需要回收内存资源以免造成内存泄漏。
常见的内存分配:
#define MAX 1000
char *p = (char *)malloc(sizeof(MAX));
这样我们就为p申请了⼀段⼤⼩为1000字节的内存,那么它在系统中是怎样表⽰呢?
直到指针p使⽤完后,就轮到我们的 free(p)和p=null;发挥作⽤了。
free(p); //就是把⼤括号去掉,即系统将此段空间再次置为可⽤内存,这样其他的分配就可以使⽤到
p=null; //就是把p指向的箭头给去掉,指向null
很显然如果没有free(p);那给p分配的这段⼤⼩为1000的内存就永远不能再使⽤,造成内存泄漏
如果没有 p=null; 那p所指向的地址还是原来的
通过以下代码看:
1 #include <stdio.h>
2
3 #include <stdlib.h>
4
5 #include <string.h>
c语言和c++区别6
7
8
9#define MAX 1000
10
11
12
13int main()
14
15 {
16
17char* pStr;
18
19//为pStr分配⼤⼩为MAX的空间
20
21 pStr = (char *)malloc(sizeof(char) * MAX);
22
23//赋值字符串
24
25 strcpy(pStr, "MagicYun");
26
27
28
29 printf("String :%s\n", pStr);
30
31 printf("Address :%p\n", pStr);
32
33
34
35//释放pStar申请的空间
36
37 free(pStr);
38
39
40
41//再次打印pStr的内容和指向地址
42
43 printf("String :%s\n", pStr);
44
45 printf("Address :%p\n", pStr);
46
47
48
49//将pStr置为NULL
50
51 pStr = NULL;
52
53 printf("String :%s\n", pStr);
54
55 printf("Address :%p\n", pStr);
56
57
58
59return0;
60
61 }
Result:
通过这个结果,我们可以印证以上的叙述
在代码中,我们经常会使⽤这样的语句:
If(NULL != p)
{
Do something; //对p进⾏操作
}
如果你在这个判断前⾯只是free(p),⽽没有置为null,这个判断仍成⽴,执⾏⾥⾯的就会出错,因为p指向的地址的内容已经被清空,得不到程序想要的结果
所以在释放⼀个指针free(p);和p=null;是两者缺⼀不可
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论