【发布时间】:2013-03-28 12:01:53
【问题描述】:
在我从 main() 调用此函数之前,我的 C 程序编译并运行良好
void rearrangeMainDiagonal(int mat[MAX_ORDER][MAX_ORDER], int order)
{
int i, j, k=0, l=0, n=0;
int temp[20], odd_temp[20], even_temp[20];
for(i=0;i<order;i++)
{
for(j=0;j<order;j++)
{
temp[k] = mat[i][i];
k++;
}
}
for(i=0;i<=k;i++)
{
if(temp[i]%2==0)
{
even_temp[l] = temp[i];
l++;
}
else
{
odd_temp[n] = temp[i];
n++;
}
}
for(j=0;j<=n;j++)
{
temp[j] = odd_temp[j];
}
for(i=0;i<=l;i++,j++)
{
temp[j] = even_temp[i];
}
k=0;
for(i=0;i<order;i++)
{
for(j=0;j<order;j++)
{
mat[i][i] = temp[k] ;
k++;
}
}
}
当我运行程序时,会弹出一条消息说'程序已停止工作。请关闭程序。当我尝试逐步执行它时,它显示“您的程序中出现访问冲突”并停止。包含行“temp[j] =odd_temp[j];”的“for循环”弹出错误。
【问题讨论】:
-
天哪,太苛刻了。啊……好多了。
-
分段错误通常意味着您正在尝试访问数组外部的数组索引,或者您正在尝试访问 NULL 指针或未初始化的数据。
-
在像 gdb 这样的 调试器 中运行它。这段代码中除了一大堆的数组索引之外什么都没有,所以你可以放心,但可以肯定其中一个超出了它的界限。 在调试器中运行它.
-
是的,我可以阅读它,因为我必须提交代码的站点确实支持很多缩进。但是我会为你编辑和缩进它。 @jrok
-
for(i=0;i<order;i++){ for(j=0;j<order;j++){ temp[k] = mat[i][i]; k++; }}。mat[i][j]或第二个循环都不是必需的。
标签: c multidimensional-array matrix int