我有一个typedef'ed结构:
typedef struct {
int x, y;
}TPosition;
和一个函数,它返回数组中非负数的第一个元素的位置:
TPosition startPos(int **arr, int lin, int col) {
TPosition p;
int i, j;
for(i = 0; i < lin; i++) {
for(j = 0; j < col; j++) {
if(nonNeg(arr[i][j])) {
p.x = i;
p.y = j;
break;
}
}
break;
}
return p;
}
在main
我有:pos = startPos(arr, lin, col);
,其中pos
是TPosition pos;
第一行中存在非负整数时,一切正常。如果arr
是一个数组,那么:
-1 -1
2 1
然后输出不正确。调试器显示索引j超过了边界(j = col)。
这很奇怪,虽然非常简单 有什么建议吗?
答案 0 :(得分:1)
您应该将p
初始化为某些内容,以便了解是否找不到任何内容。
break;
是假的。将第一个替换为return p;
并删除第二个,否则外部for循环在第一次迭代后将不会执行任何操作。
TPosition startPos(int **arr, int lin, int col) {
TPosition p = { -1, -1};
int i, j;
for(i = 0; i < lin; i++) {
for(j = 0; j < col; j++) {
if(nonNeg(arr[i][j])) {
p.x = i;
p.y = j;
return p;
}
}
}
return p;
}
答案 1 :(得分:0)
将内部break;
更改为return p;
这就是我避免break;
的原因,同时请注意,如果找不到位置,则会返回p
未初始化,我无法告诉你如何初始化它,但我建议你选择一些无效的值,并使用它。