使用指針時應注意的問題


指針是一柄雙刃劍,用得好所向披靡,用得不好搬石頭砸自己的腳。使用指針時尤其要注意,稍有不慎就會讓程序崩潰,根據自己的學習使用即碰到的問題總結於下,只是個人見解,當然只是一葉障目,指針的博大精深還有待我去發掘。

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.不正當使用的典型問題

不正確使用指針往往會出現一些意想不到的問題,最典型的就是地址訪問沖突,出現這種問題首先檢查指針


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM