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 ループ」でエラーがポップアップします。