队指针的更深层理解——free后发生了什么(原创)

先说申请空间。
第一,当我们申请一个变量后,在这里特意以动态申请资源为例: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;
}

你可能感兴趣的:(队指针的更深层理解——free后发生了什么(原创))