最近,我遇到了超出循环约束的迭代问题。通过记录,我发现循环索引不能被循环绑定所限制。
经过进一步调试后,我发现这是因为cross_parray 在以下代码段之前的某个地方发生了超出范围的写入:
cv::Point2f cross_parray[8];
int cross_points_num = 0;
int j;
// ...
for(j = 0; j < cross_points_num; j++)
{
printf("%d Cross[%d]: %f %f\n", cross_points_num, j, cross_parray[j].x, cross_parray[j].y);
}
Run Code Online (Sandbox Code Playgroud)
这是上面的输出printf:
9 Cross[1718]: 239764258816.000000 0.049635
9 Cross[1719]: 56350172250112.000000 3277795840.000000
9 Cross[1720]: 245523097321472.000000 817.286072
9 Cross[1721]: 810850240.000000 0.000000
9 Cross[1722]: 4630804223985380483294822400.000000 17845644235931175201275904.000000
9 Cross[1723]: 279783113978270150157139968.000000 217149087997375045783066247168.000000
9 Cross[1724]: 16965729398885974016.000000 75876376993756550538537486778368.000000
9 Cross[1725]: 1125715943805045169979392.000000 257558259045784092672.000000
9 Cross[1726]: 71920725395007019893418622976.000000 263079777742056587264.000000
9 Cross[1727]: 18063601952671647256054595584.000000 17857709399654295200260188798976.000000
9 Cross[1728]: 286724012145286700981684214431744.000000 0.000000
9 Cross[1729]: 1157838373559229814725935104.000000 261926873829635784704.000000
9 Cross[1730]: 0.000000 0.000000
9 Cross[1731]: 0.000000 0.000000
Run Code Online (Sandbox Code Playgroud)
为什么超出范围的错误会导致怪异的执行,从而使循环索引超出循环界限?
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |