網路攝影機預覽正常,在點擊“退出按鈕”,或者關閉運行表單後,下面的編譯器輸出欄彈出一堆警告,如下:
*** glibc detected *** /home/yan/qt/Camera_Read_OpenCv_V1-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK____/Camera_Read_OpenCv_V1: free(): invalid pointer: 0xafeff000 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x6ebc2)[0x908bc2]
/lib/i386-linux-gnu/libc.so.6(+0x6f862)[0x909862]
/lib/i386-linux-gnu/libc.so.6(cfree+0x6d)[0x90c94d]
/usr/lib/libcxcore.so.2.1(_ZN2cv8fastFreeEPv+0x23)[0xe236a3]
/usr/lib/libcxcore.so.2.1(cvFree_+0x1c)[0xe23c2c]
/usr/lib/libcxcore.so.2.1(cvReleaseImageHeader+0x6a)[0xe5b7ba]
/usr/lib/libcxcore.so.2.1(cvReleaseImage+0x3f)[0xe5b8ff]
/home/yan/qt/Camera_Read_OpenCv_V1-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK____/Camera_Read_OpenCv_V1[0x804a679]
/home/yan/qt/Camera_Read_OpenCv_V1-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK____/Camera_Read_OpenCv_V1[0x804a1f3]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0x8b3113]
/home/yan/qt/Camera_Read_OpenCv_V1-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK____/Camera_Read_OpenCv_V1[0x804a249]
======= Memory map: ========
00110000-003f1000 r-xp 00000000 08:01 557615 /home/yan/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtCore.so.4.8.0
003f1000-003f8000 r--p 002e0000 08:01 557615 /home/yan/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtCore.so.4.8.0
003f8000-003fb000 rw-p 002e7000 08:01 557615 /home/yan/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtCore.so.4.8.0
003fb000-00417000 r-xp 00000000 08:01 394171 /lib/i386-linux-gnu/libgcc_s.so.1
00417000-00418000 r--p 0001b000 08:01 394171 /lib/i386-linux-gnu/libgcc_s.so.1。。。。。。。。。。。。。。。等等很多
原因:在CameraWidget的解構函式裡,釋放指標的順序不對,應該是cvReleaseCapture(&capture),然後再cvReleaseImage(&img);
備忘:img = cvQueryFrame(capture)。 如果記憶體釋放順序顛倒了,就會出現上述警告!