gpt4 book ai didi

c++ - 为什么循环索引会超出循环边界

转载 作者:行者123 更新时间:2023-12-03 18:01:07 29 4
gpt4 key购买 nike

最近,我遇到了迭代超出循环边界的问题。
通过日志,我发现循环索引不能被循环边界所限制。

经过进一步调试,我发现这是因为在附加以下代码片段之前的某处发生了对 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);
}


这是上述 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


为什么超出范围的错误会导致循环索引超出循环边界的奇怪执行?

最佳答案

这可能是因为 cross_points_num 是在 cross_parray 之后声明的;它们位于相邻的内存区域,因此写入 cross_parray[8](超出该特定数组的范围)相当于写入 cross_points_num 的位置。

如果 cross_parray 是笔记本,那么写到最后一页的限制就像在 table 上写一样。

关于c++ - 为什么循环索引会超出循环边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59031659/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com