码迷,mamicode.com
首页 > 其他好文 > 详细

C Language Study - 错误的指针初始化方式

时间:2015-02-24 11:26:42      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

本文测试指针初始化的方式:

错误初始化方式一:

int* p = NULL;//此句等于p = NULL;将指针指向了NULL这个地址,(NULL=0x0)

*p = 0x10;//试图访问0x0内存,被拒绝


错误初始化方式二:

int* p;//定义的时候未进行初始化,此时指针指向一块未知的内存

*p = 0x10;//试图访问未知内存,被拒绝


那么指针到底如何初始化?

初始化方式参考一:

首先定义一个相应类型的变量,我们称之为指针初始化变量,它的作用

就是用来进行指针初始化的,或者程序中可以对它进行其他的利用。

int pinit = 0;

int* p = &pinit;//初始化指针,这个时候p指针就指向了变量pinit的内存地址

是一块合法的地址


初始化方式参考二:

在参考方式一中,首先定义了一个整型变量,那么我们可以事先获取它的地址

&pinit 我在Code::Blocks上测试的地址是0x22ff18

int* p = (int*)0x22ff18;//当然,这个地址绝对是合法地址,针对不同的编译器,

//我建议多预留几个字节也可以
*p = 0x10;//便可冠冕堂皇地访问该内存

这样就省去了一个整型变量的定义,有一种很高端的感觉,有木有?


初始化方式参考三:

int* p = NULL;//其实这个初始化方式不能说错,但是我们要警惕自己写出这样的代码

如果不小心会发生什么意外状况,你得清楚这块内存是不可访问的(赋值),但是,可以用

指针来指向它,正如你看到一条项链,你用手指指着它了,但是你不能去买。

在上述初始化后,在以后的程序里,在你要使用这个指针之前,先做一下检测:

if(NULL==p)

{

p = &var1//var1:一个拥有合法地址的你想去访问的变量,这样就能使得p指向一个合法地址了

}

else

{

p = &var2//var2:一个拥有合法地址的你想去访问的变量,这样就能使得p指向一个合法地址了

}

另外一种的检测方式:

assert(NULL!=p);//也就是断言,如果NULL!=p(条件为真)程序就会继续运行,否则(条件为假)终止运行。

这样,如果断言发挥了做用,我们就知道错误出现在哪里了,可以及时的修正bug

总结:最终还是得让指针指向一块合法的可以访问的内存。

C Language Study - 错误的指针初始化方式

标签:

原文地址:http://blog.csdn.net/oimchuan/article/details/43924259

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!