指針是一柄雙刃劍,用得好所向披靡,用得不好搬石頭砸自己的腳。使用指針時尤其要注意,稍有不慎就會讓程序崩潰,根據自己的學習使用即碰到的問題總結於下,只是個人見解,當然只是一葉障目,指針的博大精深還有待我去發掘。
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.不正當使用的典型問題
不正確使用指針往往會出現一些意想不到的問題,最典型的就是地址訪問沖突,出現這種問題首先檢查指針
