您的位置:首页 > 编程语言 > C语言/C++

指针,野指针

2016-07-21 10:33 183 查看
指针:指针是什么?

  指针是一个变量,它就是一个地址。它所占的空间是四个字节(32位的操作系统);

 

  int *p;

  p:指针的变量所对应的空间值是指是指分配到空间里面的值;

*p:指针所指向的空间的值是指指针所分配里面空间里的值(地址)的所对应的空间的值;

   野指针:是指指针随机指向内存中的内存,导致内存的泄漏;

   1.指向已经释放的内存;

   2.指向不能访问的内存;

   段错误是指内存的出错;

   一些看法:

   char * ptr = "hello world";

   这仅仅是将常量的h的地址赋给ptr,没有段错误的产生;

   printf("%s",ptr);

   这也没有报段错误;说明它能对打印;

   至少说明对其输出没有段错误;

   *ptr = 'H';

   运行的话将会有段错误。

   至少说明一点,段错误是在其指针对其指向的空间没有修改的权力。因为这是一个常量字符串的首地址

赋值给ptr,并没有将那段空间分给它,就是没有权力。

   如何避免野指针的出现:

   首先养成良好的编码的习惯,

   1.在定义指针的时候的,应该初始化为NULL,(没有指向时)

     初始化为NULL,便于查找,

     NULL的宏定义:#define NULL void* 0;

     0 地址不可以访问以及操作

     void* 是万能的指针类型:万能指针是指所有类型的指针都能给其 定义的变量进行赋值,但是不能读取操作

   2.在没有空间分配的指针,在其需要赋值的之前,应该先进行手动的空间的分配。(malloc.calloc,realloc)

     在调用malloc(以其为例)分配空间后,应该检验空间是否分配成功,因为其没有分配成功空间的返回的值

     是NULL,所以用if语句来判断;

     检验后,应该进行分配空间的初始化。(calloc,自动为0),可以用函数memset,bzero.

     因为手动的分配的空间是在堆空间里面分配,这段空间的使用权是用户,在用完后,应该手动的释放空间,

     使用free

     释放空间以后还需要将指针的再次初始化为NULL。

        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息