指针是一柄双刃剑,用得好所向披靡,用得不好搬石头砸自己的脚。使用指针时尤其要注意,稍有不慎就会让程序崩溃,根据自己的学习使用即碰到的问题总结于下,只是个人见解,当然只是一叶障目,指针的博大精深还有待我去发掘。
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.不正当使用的典型问题
不正确使用指针往往会出现一些意想不到的问题,最典型的就是地址访问冲突,出现这种问题首先检查指针