C语言中的迷途指针

简介: C语言中的迷途指针

1240

一、何为迷途指针。

迷途指针,顾名思义就是迷路的指针,当然开个玩笑,其实也就是如果内存已经释放(如用free函数),但是指针却在继续引用原始内存,像这样的指针,我们就称为迷途指针。

有这样一小段代码,如:

int *p=(int *)malloc(sizeof(int));

free(p);

这一段代码,程序会在堆中分配一个整形长度的内存,比如这段内存的首地址是1000,那么指针变量p的值为1000,当调用函数free释放这段内存时,指针变量p的值任然是1000,虽然这段内存已被释放,但这段内存中任然可能包含原值,但此生指针p已指向的不是一个有效的对象,因为这段内存可能会被重新利用,里面的数据也是不确定的,由于大部分运行时系统不会阻止对后续的访问与修改,所以如果我们试图解引一个已释放的指针,其行为是未定义的,那么将可能引起很多问题,如:如果再次访问这段内存,其行为是不可预期的、潜在的安全隐患、段错误(内存不可访问)等等问题。

再比如:

int *p=(int *)malloc(sizeof(int));

①:*p=5;

free(p);

②:*p=10;

①那一句代码给分配的内存写入了数据,是可以的,但是在释放过会又去向释放的内存中写入数据,行为是不可预期的,虽然你向这段内存中写入了数据,但是这段内存已被释放,这段内存可以重新被利用,所以虽然写入了10,但可能会被其他利用这段内存程序改变,因此行为不可逾期。


1240

小编给大家推荐一个学习氛围超好的地方,C/C++交流企鹅裙:870963251!适合在校大学生,小白,想转行,想通过这个找工作的加入。裙里有大量学习资料,有大神解答交流问题,每晚都有免费的直播课程


二、处理迷途指针

迷途指针引起的错误往往很难发现也难解决,我们可以用以下方式来处理迷途指针:

1、释放后设置为NULL。要是后面再次使用此指针会中指程序。注意赋值只会影响被赋值的指针。多指针的话还会有问题。

2、用第三方工具检查迷途指针。

3、自己写一个函数代替free函数。

好了今天暂时只介绍到这里,每天介绍一个小知识,有助于提高编程水平哦。

相关文章
|
2天前
|
安全 C语言
【C语言】如何规避野指针
【C语言】如何规避野指针
10 0
|
2天前
|
存储 编译器 C语言
【C语言】初步解决指针疑惑
【C语言】初步解决指针疑惑
6 0
|
18天前
|
存储 C语言
C语言 — 指针进阶篇(下)
C语言 — 指针进阶篇(下)
20 0
|
18天前
|
存储 C语言 C++
C语言 — 指针进阶篇(上)
C语言 — 指针进阶篇(上)
27 0
|
24天前
|
存储 程序员 C语言
C语言指针的概念、语法和实现
在C语言中,指针是其最重要的概念之一。 本文将介绍C语言指针的概念、语法和实现,以及如何使用它们来编写高效的代码。
14 0
|
24天前
|
存储 C语言
【C语言】深入解开指针(三)2
【C语言】深入解开指针(三)
|
24天前
|
存储 程序员 C语言
【C语言】深入解开指针(二)2
【C语言】深入解开指针(二)
【C语言】深入解开指针(二)2
|
25天前
|
存储 C语言
【C语言】深入解开指针(一)1
【C语言】深入解开指针(一)
|
26天前
|
C语言 索引
基于C语言的函数指针应用-消息命令处理框架
基于C语言的函数指针应用-消息命令处理框架
11 0
|
1月前
|
存储 人工智能 编译器
C语言指针详解
指针运算,指针和数组,二级指针
C语言指针详解