C及opencv指针释放问题
生活随笔
收集整理的這篇文章主要介紹了
C及opencv指针释放问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? 一個圖像處理的項目運行時沒有問題,最后關掉顯示的圖片時提醒觸發一個斷點,點擊繼續則出現以下畫面:
斷點停留在釋放指針的那一行。究其原因如下:
1.錯用free釋放IplImage*
IplImage* input = cvLoadImage("data/LOGO/2_1.jpg");//待測圖 IplImage* test = cvLoadImage("data/LOGO/1_1.jpg"); //基準圖 free(input); free(test);? ?IplImage*是opencv里面用于存儲圖像的結構,不能用free來釋放。應該如下:
cvReleaseImage(&input); cvReleaseImage(&test);2、malloc與free不對應
unsigned char* colors1 = (unsigned char*)input->imageData; unsigned char* colors2 = (unsigned char*)test->imageData; free(colors1); free(colors2);?一個malloc對應一個free,而上述指針不是用malloc申請的動態內存空間,所以不能用free去釋放。但怎么處理不知道,先注釋掉了。
3、注意循環里面動態申請的內存空間 需要在循環里面釋放,不能在程序結尾才釋放。
4、new和delete相對應
double *homo = new double[9];//數組 delete[] homo; int *count1 = new int;//一個變量 delete count1;注意delete的用法不是:delete(homo),不知道為什么這樣寫沒出錯。
5、二維數組循環申請的需要循環釋放
int **a =(int**)malloc(sizeof(int*)*3);//為二維數組分配3行for (i = 0; i < 3; ++i)//為每列分配4個大小空間{ a[i] = (int*)malloc(sizeof(int)*4);}//釋放動態開辟的空間for (int i = 0; i < 3; ++i){free(a[i]);}free(a); int num = 3;(int*)* array = new int*[num]; // 申請int*類型數組的內存空間,賦值給(int*)*類型的arrayfor(int i=0; i<num; ++i) {array[i] = new int[num]; // 分別給int*類型的數組申請空間,即一維數組的動態申請。}for(int i=0; i<num; i++) //釋放{delete[] array[i];}delete[] array;6、指針釋放很重要!!!? ?在平時寫小程序的時候注意不到,不釋放也沒什么影響,但是一旦到做大項目的時候,指針內存的問題會讓人很崩潰。
總結
以上是生活随笔為你收集整理的C及opencv指针释放问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matlab在坐标点上按顺序标序号
- 下一篇: Opencv中IplImage的四字节对