这是悬空指针吗?
Is this a dangling pointer?
int main(int argc, char *argv[]) {
int x[3] = {1, 2, 3}; //create an array x
int *y = x; //create pointer y and let it point to the array x
*y = null; //now x points to the null, therefore x is a dangling pointer
}
这里我有点疑惑,x指向的值是null,x是悬垂指针吗?
x
是一个声明为
的数组
int x[3] = {1, 2, 3};
所以不能是悬挂指针。数组类型的对象不是指针。
在此声明中
int *y = x;
用作初始化表达式的数组指示符 x
被隐式转换为指向其第一个元素的指针,并且该指针不是左值。在此声明之后,初始化表达式将不存在。
因此在所呈现的程序中没有悬挂指针。
注意这个声明
*y = null;
无效。看来你的意思是
y = NULL;
现在变量y
是一个空指针。
这是一个悬挂指针的例子。
int *p = malloc( sizeof( *p ) );
free( p );
在 free
的调用之后,指针 p
是一个悬挂指针。它没有指向有效的对象。
int main(int argc, char *argv[]) {
int x[3] = {1, 2, 3}; //create an array x
int *y = x; //create pointer y and let it point to the array x
*y = null; //now x points to the null, therefore x is a dangling pointer
}
这里我有点疑惑,x指向的值是null,x是悬垂指针吗?
x
是一个声明为
int x[3] = {1, 2, 3};
所以不能是悬挂指针。数组类型的对象不是指针。
在此声明中
int *y = x;
用作初始化表达式的数组指示符 x
被隐式转换为指向其第一个元素的指针,并且该指针不是左值。在此声明之后,初始化表达式将不存在。
因此在所呈现的程序中没有悬挂指针。
注意这个声明
*y = null;
无效。看来你的意思是
y = NULL;
现在变量y
是一个空指针。
这是一个悬挂指针的例子。
int *p = malloc( sizeof( *p ) );
free( p );
在 free
的调用之后,指针 p
是一个悬挂指针。它没有指向有效的对象。