5118站长工具箱,wordpress搭建问答系统,全国房产信息查询系统,霸州放心的网络建站一个图像处理的项目运行时没有问题#xff0c;最后关掉显示的图片时提醒触发一个断点#xff0c;点击继续则出现以下画面#xff1a;断点停留在释放指针的那一行。究其原因如下#xff1a;
1.错用free释放IplImage*
IplImage* input cvLoadImage(data/LOGO/2_1.jpg最后关掉显示的图片时提醒触发一个断点点击继续则出现以下画面断点停留在释放指针的那一行。究其原因如下
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的用法不是deletehomo不知道为什么这样写没出错。
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 i0; inum; i) {array[i] new int[num]; // 分别给int*类型的数组申请空间即一维数组的动态申请。}for(int i0; inum; i) //释放{delete[] array[i];}delete[] array;6、指针释放很重要在平时写小程序的时候注意不到不释放也没什么影响但是一旦到做大项目的时候指针内存的问题会让人很崩溃。