空悬指针和野指针的区别

空悬指针:指向的空间已被释放
野指针:指针未被初始化(赋值)


code by C

int main(){
   char c;
   char *dp = &c;

   free(dp);
   return 0;
  //变量p指向的空间被释放,dp变成空悬指针
}
int func()
{
    char *dp;//野指针,没有初始化
    static char *sdp;//非野指针,因为静态变量会默认初始化为0
}
void func()
{
    char *dp = (char *)malloc(A_CONST);
    free(dp);         //dp变成一个空悬指针
    dp = NULL;        //dp不再是空悬指针
    /* ... */
}
int * func ( void )
{
    int num = 1234;
    /* ... */
    return #
    //num是基于栈的变量,当func函数返回,变量的空间将被回收,
    //此时获得的指针指向的空间有可能被覆盖。
}

你可能感兴趣的:(空悬指针和野指针的区别)