指针,野指针

指针:指针是什么?
  指针是一个变量,它就是一个地址。它所占的空间是四个字节(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。
        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值