free函数解析

##代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void GetMemory(char **p,int num)
{
    *p = malloc(num);
}
int main()
{
    char *str = NULL;   
    GetMemory(&str, 100);   

    strcpy(str, "hello");   
    free(str);

    if (str != NULL)
    {
        strcpy(str, "world");
    }   
    printf("\n str is %s", str);
    getchar();
}

打印出来的结果是:str is world

##解释
本题主要考察了对free的理解,总结一下就是3点

  • free只是释放了malloc所申请的内存,并不改变指针的值
  • 由于指针所指向的内存已经被释放,所以其它代码有机会改写其中的内容,相当于该指针从此指向了自己无法控制的地方,也称为野指针
  • 为了避免失误,最好在free之后,将指针指向NULL