大小为[4344][20]的2D_array按20行分块遍历的代码是否正确?
代码问题分析
你的实现存在3个明显错误,无法满足需求:
- 外层for循环增量逻辑错误。你写的
l + 20只有运算操作没有赋值给l,l的值永远不会变化,会导致外层循环陷入死循环。且整个循环内部完全没有用到变量l,该变量属于冗余定义,没有存在必要。 - 边界判断逻辑错误。你的外层循环条件是
l + 20 < 4344,总行数4344的情况下,最后一个分块是从4340行到4343行(共4行),此时4340 + 20 = 4360 > 4344,会导致这最后4行完全不会被处理,不符合你要遍历到最后一行的需求。 - 内层循环没有做边界防护。哪怕外层边界修改正确,当最后一个分块行数不足20的时候,内层循环
u < tindex + 20会出现数组越界访问,访问到不存在的4344、4345等行,触发未定义行为。
修正后的参考代码
int main() { const int total_rows = 4344; const int batch_size = 20; // 按批次遍历所有行 for (int tindex = 0; tindex < total_rows; tindex += batch_size) { // 计算当前批次实际要处理的行数,不足20行则取剩余行数 int current_batch_end = tindex + batch_size; if (current_batch_end > total_rows) { current_batch_end = total_rows; } for (int u = tindex; u < current_batch_end; ++u) { // 处理第u行的逻辑 // ............ } } }
内容的提问来源于stack exchange,提问作者JOJO
相关产品推荐
相关产品推荐

