C++中debug assertion failed dbgheap.c 错误怎么整?

色郎中 2016-07-01 09:12:29
网上下了个工程,


//声明:
...
int** address_1, address_Number_1;...

//调用的地方:

address_1 = car_License_box(img_13, img_14, &address_Number_1);
for (j = 0; j< address_Number_1; j++){



//函数

int** car_License_box(Mat& mat1, Mat& mat2, int* number){
Mat threshold_output;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
Point s1, s2;
int width_1, height_1;
int width = mat1.rows;
int height = mat1.cols;
int sum = 0;

int morph_elem = 3;
int morph_size = 3;
int** a = (int**)malloc(width * sizeof(int*));
//腐蚀
Mat element = getStructuringElement(MORPH_RECT, Size( 2*morph_size + 1, 2*morph_size+1 ), Point( -1, -1));
dilate(mat1, mat1, element);

/// 找到轮廓
findContours(mat1, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );

/// 多边形逼近轮廓 + 获取矩形和圆形边界框
vector<vector<Point> > contours_poly( contours.size() );
vector<Rect> boundRect( contours.size() );
vector<Point2f>center( contours.size() );
vector<float>radius( contours.size() );

for( int i = 0; i < contours.size(); i++ )
{ approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true );
boundRect[i] = boundingRect( Mat(contours_poly[i]) );
minEnclosingCircle( contours_poly[i], center[i], radius[i] );
}

/// 画多边形轮廓 + 包围的矩形框 + 圆形框
mat2 = Mat::zeros(mat1.size(), CV_8UC3 );
for( int i = 0; i< contours.size(); i++ )
{
s1 = boundRect[i].tl();
s2 = boundRect[i].br();
height_1 = s2.x - s1.x;
width_1 = s2.y - s1.y;

if((height_1 > (3 * width_1)) && (width_1 > (width / 2))){
a[sum] = (int* )malloc(4 * sizeof(int));
a[sum][0] = s1.x;
a[sum][1] = s1.y;
a[sum][2] = s2.x;
a[sum][3] = s2.y;
sum += 1;
}
}
*number = sum;
return a;
}


//返回时
*number = sum;
return a;
,就报错
Debug Assertion Failed (dbgheap.c Line:1424 Expression: _pFirstBlock == pHead). 




在循环调用这个函数时;外层循环是2次,,也就是说下面这个调用,正常情况下应该执行两次调用下面这个函数;

address_1 = car_License_box(img_13, img_14, &address_Number_1);


这端代码,有两个工程,代码一样,直接文件添加到新工程里都是,,一个工程中,在调用函数时不报错,,另个工程就每次都报错。

...全文
605 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-07-02
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
paschen 版主 2016-07-02
  • 打赏
  • 举报
回复
说的很明白啊,断言失败, _pFirstBlock == pHead 这句不成立 出错时点中断,通过调用堆栈、变量窗口观察分析原因
小灸舞 2016-07-02
  • 打赏
  • 举报
回复 1
属性--配置属性--C/C++--代码生成--运行库:
Multi-threaded Debug DLL (/MDd)

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧