我的程序在早期循环中运行完美。但经过几次循环后,程序停止,因为访问冲突读取位置为0x01534000。每次运行它都会有不同的地址。
错误位于此处:
for( k = 0; k < neighbors; k++ )
{
MhP[i].x += E[k] * (pt[k].x - pt[i].x);
MhP[i].y += E[k] * (pt[k].y - pt[i].y);
WP[i] += (float) E[k];
}
我的第一个建议是内存过载。所以我检查我的代码的底部,我释放MhP,WP和E.但不是pt(我需要在此函数之外)。 这是他们的分配:
E = (float *) cvAlloc( neighbors * sizeof( float ));
MhP = (CvPoint *) cvAlloc( neighbors * sizeof ( CvPoint ));
WP = (float *) cvAlloc( neighbors * sizeof ( float ));
并初始化。
for( k = 0; k < neighbors; k++ )
{
E[k] = _alpha * Econt[k] + _beta * Ecurv[k] + _gamma * Eimg[k];
}
MhP[i].x = 0;
MhP[i].y = 0;
WP[i] = 0;
我修改了蛇的活动轮廓代码。但即使我不修改它(原始cvSnake)它也有同样的问题。我使用代码进行对象跟踪。所以算法运行了很多次。就像我之前说过的那样,几次(可能是30帧)后访问违规读取位置的错误。 抱歉我的英文不好:(。请帮助我..