问题:指针为什么使用前要进行初始化及相关例子

很多函数虽然是以指针为参数,但是空间是需要用户分配的。
未经过初始化的指针或者已被delete掉的指针,叫做野指针。

不初始化也能通过编译器,但指针指向哪里,你根本不知道,如果指向的是内存中比较重要的地方,可能会导致系统异常,如有时电脑会提示指向了一个不可用的地址之类的错误。

定义一个指针的时候,可以在声明语句中初始化指针,此时被初始化的是指针,而不是它指向的值。由于有宏定义 #define NULL 0 ,可以初始化为NULL,或者new个内存给它也好。总之,必须是一个可以控制的值。

产生野指针的情况:
一.指针变量没有被初始化
二.指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针
三.指针操作超越了变量的作用范围

 

指针的危险:

在C++中创建指针时,计算机将分配用来存储地址的内存,但并不管分给地址的4个字节中开始时存的是什么值,如下所示:

long* fellow;

*fellow = 223323;

fellow确实是一个指针,但是它开始时指向哪里/存储的是什么呢?由于fellow没有被初始化,它可能有任何值。如果fellow的值碰巧是1200,计算机将把数据放在地址1200上,即使这恰巧是程序代码的地址。fellow指向的地方很可能并不是所要存储223323的地方。这种错误可能会导致一些最隐匿、最难以跟踪的bug。


具体例子:
例1:

int main() 

{

  char a[]="hello";

   char *str;         //注意这里没有初始化,直接这样运行,会提示Debugger Exception Notification的系统错误,需将此行改为

   strcpy(str,a);   //char *str = new char[20];,程序才可正确运行

   printf("%s,%s\n",a,str);

  return 0;

  }

例2:在.h文件中定义指向类对象的指针,在.cpp文件中必须new出相应的内存空间给它,使用时才不会出错。
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值