A
是一个2D数组,我想将所有非零项存储在一个名为B
的新1D数组中...这是我调用的函数,但是它崩溃的程序,我不知道我做错了什么?
int doSomething(int A[N][N], int B[ ], int C[ ]){
int i,j;
int k=0;
for(i=0; i<N; i++){
for(j=0; j<N; j++){
if (A[i][j] != 0){
B[k]= A[i][j];
k++;
}
}
}
for (i = 0; i < 4; i++) {
printf("%d ", B[i]);
}
}
答案 0 :(得分:0)
问题是4
内的for(i = 0; i < 4; i++)
。可能B
数组的长度小于4,因此会导致错误。因为您正在访问超出范围的索引。所以你应该使用for (i = 0; i < k; i++)
代替。
答案 1 :(得分:0)
有两个问题。
首先,@ hamed说'我'应该小于'k'而不是小于'4'
其次你假设它是一个方形数组,可能不是这种情况(行和列的长度相同)
int doSomething (int A[r][c], int B[ ]){
int k=0;
for(; r>0; r--){
for(; c>0; c--){
if (A[i][j] != 0){
B[k]= A[i][j];
k++;
}
}
}
for (i = k-1; i >= 0; i--) {
printf("%d ", B[i]);
}
return B;
}
注意:为了提高效率,最好在这种情况下向后循环,你忘了返回B,而C(据我所知)是不合情理的