微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

这是悬空指针吗?

如何解决这是悬空指针吗?

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 是一个悬空指针。它没有指向有效的对象。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。