您的位置:首页 > 其它

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

2013-04-21 15:54 337 查看
很多函数虽然是以指针为参数,但是空间是需要用户分配的。

未经过初始化的指针或者已被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出相应的内存空间给它,使用时才不会出错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐