Romi-知行合一

轻轻的风轻轻的梦,轻轻的晨晨昏昏, 淡淡的云淡淡的泪,淡淡的年年岁岁。
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

使用指针时应注意的问题

Posted on 2012-04-06 23:00  romi  阅读(4169)  评论(1编辑  收藏  举报

指针是一柄双刃剑,用得好所向披靡,用得不好搬石头砸自己的脚。使用指针时尤其要注意,稍有不慎就会让程序崩溃,根据自己的学习使用即碰到的问题总结于下,只是个人见解,当然只是一叶障目,指针的博大精深还有待我去发掘。

1.定义指针后要将其初始化

所谓的初始化就是将指针指向具体的位置,若指针不指向任何位置就赋为NULL,不能让指针为一个野指针。如下

int *p;

p=NULL ;  //或者指向一个地址p=&a

如果是类中的全局变量就在构造函数中初始化,如果是局部变量就在定义了后立即初始化

2.给指针分配了内存空间引用时一定要注意大小

比如定义了int型指针p

p = new int[100];

在引用p[i]时,i一定不能大于99,否则会出现访问越界

3.要记得释放指针内存空间

在需要释放指针内存空间时(不需要使用该指针或需要重新分配内存空间时),一定要将其释放,然后再赋予NULL

delete []p;

p=NULL;

4.特殊情况

对于一些局部变量的指针,如果分配了内存空间,照理说用完后就要释放掉,但在有些情况下,比如某些对象与该指针有关系时,释放掉内存空间后在使用对象时反而会让程序崩溃,这时就不用管指针了

比如:

QImage *image;  //全局变量

unsigned char* data = new unsigned char[bytePerLine * imageY]; //局部变量

image = new QImage(data,imageX,imageY,bytePerLine,QImage::Format_RGB888);

这时image对象就与data有关,如果delete掉data,再使用image时程序就会崩溃(为什么会这样,一时还没弄明白)

5.不正当使用的典型问题

不正确使用指针往往会出现一些意想不到的问题,最典型的就是地址访问冲突,出现这种问题首先检查指针