先说申请空间。
第一,当我们申请一个变量后,在这里特意以动态申请资源为例:char* p=realloc(10)。当我们申
请好资源后,系统负责为我们维护——不再分配给其他对象。
这里要注意,如果我们不再利用这块资源,我们应该free掉,否则就会发生“内存泄漏”,说白了就
是浪费掉这块内存了(不用就跟系统说一声么,让它收回去)。
第二,也是重点。当我们用free释放资源后,利用官方的话就是指针的资源“内存释放”,到底发生
了什么?
1。free后这个指针的值不变,也就是仍然指向那块空间。
2。这块资源发生了什么?
a:系统不再维护这个资源,随时可能分配给别的对象。
b:这块资源短时间内其实内容并不变,只是开始的4个字节被替为'/0'而已,这样
造成一个假相,好像在free后这个指针指向空值。其实不然啊!
#include<string.h>
int main()
{
char *p = (char *) malloc(10);//malloc后,内存会为我们维护这10个字节
int i = 0;
strcpy(p, "helloworld"); //越界的字符(个数超过10)得不到维护,可能被修改
printf("p:%s/n",p);
free(p); // p 所指的内存被释放,但是p所指的地址仍然不变
//内存被释放在实际操作中是将指针所指的开始4个字符清为'/0',
//而后面的字符都不变,当然这样可能会在以后出错,因为free以
//后这10个字节的内存已经不能维护了,随时可能被分配给别的对象用,危险啊!
while(i!=9)
{
printf("p:%c/n",p[i]);
i++;
}
return 1;
}