C语言关于指针的问题

C语言初学者问题1

对于指针中野指针的加强理解

  在学习C语言的时候,看到定义指针都必须附初值NULL,否则可能会出现野指针的情况,在后续的查阅资料的时候,总结出来,可能出现野指针的几个可能。

  1. 指针未初始化。
  2. 指针释放后没有被制空。
  3. 返回指向栈内存的指针。

  第一种情况就是指在定义指针的时候没有初始化为空,也就是没有初始化为NULL。同时还在某些资料里面看到说,给指针赋予NULL和给指针赋予0是等价的,但是还是看到很多的例程或者书中要求赋予NULL。

  第二种情况是说,我们在使用例如malloc函数开辟一块空间并且将地址存在指针型变量,指针在使用完之后使用free函数将空间释放,应该将指针从新赋值为NULL,否则指针将是一个不确定指向的野指针。

  但是对于第三种情况来说,就不是很理解了,首先就是对于这个空间分配就不是很了解,然后突然冒出来这个就不是很明白。在别人的博客上面看到比较简单的堆栈空间解释:

  1. 堆空间:由程序员自己分配空间,如malloc需要指定分配多少个多大的字节空间,不用的时候需要自己释放
  2. 栈空间:栈空间是由系统自动分配与释放,如int,char等大小都已固定,局部变量,函数的参数值等

  于是就不能理解了,为什么函数不能返回指向栈内存的的指针呢?还有就是如果我们在定义指针的时候没有初始化NULL,但是后面很快就赋值使用,会出现野指针的情况吗?最后就是NULL和0在指针赋值上面真的是等价的吗?

猜你喜欢

转载自blog.csdn.net/qq_42802851/article/details/97235326