以下代码如何导致悬空指针。
{
char *cPointer = malloc ( some constant number );
/* some code */
free ( cPointer );
cPointer = NULL;
/* some code */
}
答案 0 :(得分:14)
它不能。
这会:
char * a = malloc(556);
char * b = a;
free(a);
a = NULL;
b现在是悬空指针,因为它指向它的对象已经消失但是b
仍然将地址存储到以前对象的内存中,当你试图访问它时会得到有趣的结果 - 这取决于记忆已被重复使用或未受影响。
答案 1 :(得分:3)
如果第一个“某些代码”将指针值从cPointer复制到某个其他指针变量,而第二个“某些代码”使用该另一个指针变量,则会遇到麻烦。
如果第一个“某些代码”生成异常,因此永远不会达到free,则会泄漏内存。