热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C中的悬空指针

HereyouwilllearnaboutdanglingreferenceanddanglingpointerinC.在这里,您将了解C中的悬空引用和悬空指针。In

Here you will learn about dangling reference and dangling pointer in C.

在这里,您将了解C中的悬空引用和悬空指针 。

In computer programming, memory is allocated for holding data object. After the work is done the memory is deallocated so that this memory can be used to store any other data object.

在计算机编程中,分配了内存以保存数据对象。 工作完成后,将内存重新分配,以便可以使用此内存存储任何其他数据对象。

Also Read: void pointer in C

另请阅读: C中的void指针

What is Dangling Pointer?

什么是悬空指针?

While programming, we use pointers that contain memory addresses of data objects. Dangling pointer is a pointer that points to the memory location even after its deallocation. Or we can say that it is pointer that does not point to a valid data object of the appropriate type. The memory location pointed by dangling pointer is known as dangling reference.

在编程时,我们使用包含数据对象的内存地址的指针。 悬空指针是即使在释放后仍指向内存位置的指针。 或者我们可以说是指针,它没有指向适当类型的有效数据对象。 悬空指针指向的存储位置称为悬空引用。

Now if we access the data stored at that memory location using the dangling pointer then it will result in program crash or an unpredictable behaviour.

现在,如果我们使用悬空指针访问存储在该内存位置的数据,则将导致程序崩溃或不可预测的行为。

Dangling Pointer in C

Let’s take an example to understand this.

让我们以一个例子来理解这一点。

C语言中指针悬空的原因 (Cause of Dangling Pointer in C)

void function(){int *ptr = (int *)malloc(SIZE);. . . . . .. . . . . . free(ptr); //ptr now becomes dangling pointer which is pointing to dangling reference
}

In above example we first allocated a memory and stored its address in ptr. After executing few statements we deallocated the memory. Now still ptr is pointing to same memory address so it becomes dangling pointer.

在上面的示例中,我们首先分配了一个内存,并将其地址存储在ptr中。 在执行了几条语句后,我们重新分配了内存。 现在,ptr仍指向相同的内存地址,因此它变成了悬空指针。

I have mentioned only one scenario of dangling pointer. There are many other situations that causes dangling pointer problem.

我只提到了悬空指针的一种情况。 还有许多其他情况会导致悬空指针问题。

To read more you can visit: https://en.wikipedia.org/wiki/Dangling_pointer

要了解更多信息,您可以访问: https : //en.wikipedia.org/wiki/Dangling_pointer

How to Solve Dangling Pointer Problem in C?

如何解决C语言中的悬空指针问题?

To solve this problem just assign NULL to the pointer after the deallocation of memory that it was pointing. It means now pointer is not pointing to any memory address.

要解决此问题,只需在指针所指向的内存解除分配之后将NULL分配给指针。 这意味着现在指针没有指向任何内存地址。

Let’s understand this by a code in C.

让我们通过C中的代码来理解这一点。

void function(){int *ptr = (int *)malloc(SIZE);. . . . . .. . . . . . free(ptr); //ptr now becomes dangling pointer which is pointing to dangling referenceptr=NULL; //now ptr is not dangling pointer
}

If you have any doubts related to above dangling pointer in C tutorial then feel free to ask by commenting below.

如果您对以上C教程中的悬空指针有疑问,请随时在下面评论。

翻译自: https://www.thecrazyprogrammer.com/2016/03/dangling-pointer-in-c.html




推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Iamworkingonaprojectwhichrequiresopentokandcallkitfornotifyingusers.However,theappli ... [详细]
  • iOS开发Debug和Release的理解
    2019独角兽企业重金招聘Python工程师标准参考:http:blog.csdn.netmad1989articledetails406580331&# ... [详细]
  • 无限_iOS无限轮播视图
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了iOS无限轮播视图相关的知识,希望对你有一定的参考价值。  以前曾经写过一个用UICollectionView的无限轮播 ... [详细]
author-avatar
php程序小哥
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有