C语言之野指针形成的原因及解决办法

野指针

1.关于野指针

  • 野指针在我们C语言编程的过程中是很常见的,那么何为野指针以及野指针是如何形成的呢?这是我们首先要解决的问题。然后才是如何去解决野指针的问题。
  • 野指针是指向垃圾内存的指针,而不是NULL;或者说是指向未知内存的指针。

2.野指针形成的原因

  1. 指针P被free掉了,却没有将其置为NULL。free函数只是将指针所指向的内存释放掉了,使得内存成为自由内存,但是并没有把指针本身的内容清除掉,所以指针仍指向已经释放的动态内存。这是很危险的。

  2. 没有及时初始化指针。

  3. 指针操作超越了变量的作用域范围。如数组越界。

  4. 不要返回指向栈内存的指针,因为返回时栈内部才能已经被释放掉了,指针不能再继续访问该块内存。

关于C语言中内存分区以及指针相关的用法可以参看我的另外两篇博客:
指针函数
C语言内存管理

3.解决野指针问题的几个办法

说是解决,其实是预防野指针的形成。下面针对上面的形成原因来逐一提出常见的解决对策。

  1. 当使用free()函数释放掉了malloc()自动申请堆区空间后,及时将指针置为NULL。如:
int *p = (int *)malloc(sizeof(int));
free(p);
p = NULL;
  1. 定义指针后要及时的初始化。如果没有初始化就直接对该指针所指向的值进行赋值的话可能会造成不可预知的后果。所以应该养成一个好习惯,定义指针的同时对其进行初始化。
  2. 在利用指针访问数组或者字符串等的时候,应该注意范围,不要越界访问。
  3. 我们知道栈空间定义的指针是不能返回给另一个函数,因为该函数执行完毕后,该指针指向的内存就被释放掉了,若需要返回我们可以在该指针前面加上static修饰,将其放到静态存储区去。如不必要,不要返回指向栈空间的指针。
发布了49 篇原创文章 · 获赞 15 · 访问量 9276

猜你喜欢

转载自blog.csdn.net/wit_732/article/details/97951802