如何将free()紧接着分配NULL导致悬空指针?

时间:2010-04-26 07:03:35

标签: c++ pointers

以下代码如何导致悬空指针。

{
    char *cPointer = malloc ( some constant number );
    /* some code */
    free ( cPointer );      
    cPointer = NULL;        
    /* some code */
}

2 个答案:

答案 0 :(得分:14)

它不能。

这会:

char * a = malloc(556);
char * b = a;
free(a);
a = NULL;

b现在是悬空指针,因为它指向它的对象已经消失但是b仍然将地址存储到以前对象的内存中,当你试图访问它时会得到有趣的结果 - 这取决于记忆已被重复使用或未受影响。

答案 1 :(得分:3)

如果第一个“某些代码”将指针值从cPointer复制到某个其他指针变量,而第二个“某些代码”使用该另一个指针变量,则会遇到麻烦。

如果第一个“某些代码”生成异常,因此永远不会达到free,则会泄漏内存。