C及opencv指针释放问题

本文介绍了在C++与OpenCV项目中遇到的指针释放问题,包括错误使用free释放IplImage*、malloc与free不对应、循环内动态内存的释放、new与delete的误用以及二维数组的释放策略。这些问题可能导致程序运行时出现异常,正确理解并处理这些情况对于避免内存泄漏至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    一个图像处理的项目运行时没有问题,最后关掉显示的图片时提醒触发一个断点,点击继续则出现以下画面:


断点停留在释放指针的那一行。究其原因如下:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值