One of arguments' values is out of range

Kaphen 2014-04-18 05:30:04
做的是智能剪刀的算法,其中加进Live-Wire 2-D DP graph search搜索最优路径时,加入了以下函数SearchOptimalPath()和ifActivePixelsEmpty(),可是一运行就出现 one of arguments' values is out of range (index is out of range) in function cvPtr2D,c:\\的错误,求各位路过的大神帮帮我看一下这段代码错在哪了

//Live-Wire 2-D DP graph search
void CSegmentDlg::SearchOptimalPath()
{

float tempTotalCost;
int m,n,i,j;
while (!ifActivePixelsEmpty())//While still points to expand
{
//Remove minimum cost pixel q from active list.
double minCost=0;
// int m,n;
for(i=0;i<nw;i++)
for( j=0;j<nh;j++)
if(ActivePixels[i][j])
{
if (minCost=0)
{
minCost=TotalCost[i][j];
m=i;
n=j;
}
else if(TotalCost[i][j]<=minCost)
{
minCost=TotalCost[i][j];
m=i;
n=j;
}
}
ActivePixels[m][n]=0;
//Mark q as expanded (i.e., processed).
ifExpanded[m][n]=1;
for( j=n-1;j<=n+1;j++)
for(i=m-1;i<=m+1;i++)
if(i!=m&&j!=n&&i>=0&&i<nw&&j>=0&&j<nh)
if(ifExpanded[i][j]==0)
{
//Compute total cost to neighbor.
getthefD(TheResult,m,n,i,j);
getthefG(TheResult,i,j);
getthefZ(TheResult,i,j);
tempTotalCost=TotalCost[m][n]+getCost();
//Remove higher cost neighbor’s from list
if((ActivePixels[i][j]==1)&&(tempTotalCost<TotalCost[i][j]))
{
ActivePixels[i][j]=0;
TotalCost[i][j]=tempTotalCost;
Pointers[i][j]=CPoint(m+tx,n+ty);
CClientDC dc(this);
dc.MoveTo(i+tx,j+ty);
dc.LineTo(m+tx,n+ty);

}
//If neighbor not on list,
if(ActivePixels[i][j]==0)
{
//assign neighbor’s total cost,
TotalCost[i][j]=tempTotalCost;
// set (or reset) back pointer, what pointer??
Pointers[i][j]=CPoint(m+tx,n+ty);
CClientDC dc(this);
dc.MoveTo(i+tx,j+ty);
dc.LineTo(m+tx,n+ty);
ActivePixels[i][j]=1;// and place on (or return to) active list.
}
}
}
}


//判断List of active pixels是否为空
bool CSegmentDlg::ifActivePixelsEmpty()
{
for(int i=0;i<256;i++)
{
for(int j=0;j<256;j++)
if(ActivePixels[i][j]==1)
//if(ifExpanded[i][j]==0)
{
return false;
}
}
return true;
}

该函数在OnLButtonDown()以下为OnLButtonDown()里关于调用SearchOptimalPath()的语句:
	if(mx>=0&&mx<=nw &&my<=nh&&my>=0)
{
if(ifPainting==false&&(SeedPoint.x==0||SeedPoint.y==0))
{
ifPainting=true;
SeedPoint=point;
FreePoint=point;
SeedPixel=cvGet2D(TheResult,mx,my);
ActivePixels[mx][my]=1;
SearchOptimalPath();
}
}
...全文
610 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kaphen 2014-04-19
  • 打赏
  • 举报
回复
引用 3 楼 zzdmfk 的回复:
数组的下标超出了数组的长度


多谢啊,真的是下标超出了,是引用其它函数时下标超出了,
还犯了个很低级的错误:在CSegmentDlg::SearchOptimalPath()里的if (minCost=0)应该写成if (minCost==0)
Kaphen 2014-04-18
  • 打赏
  • 举报
回复
引用 6 楼 zzdmfk 的回复:
[quote=引用 5 楼 Kaphen 的回复:] [quote=引用 3 楼 zzdmfk 的回复:] 数组的下标超出了数组的长度
谢谢,这个我有检查了,应该是没有超过它的长度的哦[/quote] 再仔细看看吧,一定是的。比如array[5][6],下标横向是0到4,纵向是0到5。[/quote] 嗯嗯 ,我再找找看
路人乙2019 2014-04-18
  • 打赏
  • 举报
回复
引用 5 楼 Kaphen 的回复:
[quote=引用 3 楼 zzdmfk 的回复:] 数组的下标超出了数组的长度
谢谢,这个我有检查了,应该是没有超过它的长度的哦[/quote] 再仔细看看吧,一定是的。比如array[5][6],下标横向是0到4,纵向是0到5。
Kaphen 2014-04-18
  • 打赏
  • 举报
回复
引用 3 楼 zzdmfk 的回复:
数组的下标超出了数组的长度
谢谢,这个我有检查了,应该是没有超过它的长度的哦
Kaphen 2014-04-18
  • 打赏
  • 举报
回复
引用 2 楼 VisualEleven 的回复:
你先Debug下调试一下,看看call stack函数调用堆栈
谢谢,本人不大懂调试,是指调试程序运行卡住时 再按 调试-》Break 吗?
路人乙2019 2014-04-18
  • 打赏
  • 举报
回复
数组的下标超出了数组的长度
Eleven 2014-04-18
  • 打赏
  • 举报
回复
你先Debug下调试一下,看看call stack函数调用堆栈
Kaphen 2014-04-18
  • 打赏
  • 举报
回复
我根据的算法是这个:

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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