这里排序是我的(不完全的)代码2维数组在C
int rows(int board[][9]){
int badUnits = 0, i = 0, n = 9, j, z = 0;
int (*temp)[9];
//Sort each row of 2d array
for (z; z < n; z++){
for (i; i < n; i++){
for (j = i; j < n; j++){
if (board[z][i] > board[z][j]){
temp = board[z][i];
board[z][i] = board[z][j];
board[z][j] = temp;
}
}
}
}
printf ("%d\n", temp[1][0]);
printf ("%d\n", temp[1][1]);
return badUnits;
}
该函数采用一个9×9阵列的段。
执行打印语句时出现分段错误。 我相信我的排序代码是正确的,因为它与我用于1d阵列的类似,并且我认为其他所有内容都正确分配了。
所以罪魁祸首是我的临时变量。我已经完成并试图给它赋值,尝试改变类型,并考虑到二维数组衰减成一个指针,但实际上并不是一个指针。
我留下的结论是,这是一个动态分配问题。有人可以请帮助我解决这个问题吗?我已经用尽了我的知识库,并且陷入困境。
澄清:我决定打印temp变量,因为我认为它会提供一些信息。主要问题是交换不能正常工作,当我最初尝试打印板[] []时,我仍然留下未排序的数组。我知道那个纸板就是我所支持的印刷品。
谢谢你的帮助!
如果发生交换(对于排序后的输入,情况并非如此),那么'temp'将只被赋值。如果你的棋盘是9x9,你为什么要在_less_' n = 8'(即.max'z,i,j'将是7)处停止循环? – SleuthEye 2014-10-19 23:16:10
将n设置为9,非常感谢。 – mrybak834 2014-10-19 23:23:31
此外,为什么你不声明'temp'作为'int temp',因为你在交换过程中存储'int's在这个变量中(这与printf不一致)? – SleuthEye 2014-10-19 23:26:51