これは私の宿題の一部です。助けが必要です。私の仕事は行列の主対角線上の数字が降順になるように行と列を入れ替えることです。行と列の数は同じです。私は動的にメモリを割り当てる必要があります。ここで2次元配列の主対角線上の値を交換する - C
は一例であり: 入力:
1 2 1<4 so we swap rows and columns and the final result is 4 3
3 4 2 1
問題は、私は3×3アレイ又はさらに大きなを挿入すると、私はセグメンテーション違反のいくつかの種類を取得することです。ここに私のコードです、助けてください!
int **t, n, i, j, aux;
printf("Insert the size of the matrix: ");
scanf("%d",&n);
t = malloc(n * sizeof(int *));
for(i=1; i <= n; i++){
t[i]=malloc(n * sizeof(int));
}
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
printf("Element [%d][%d] : ", i, j);
scanf("%d", &t[i][j]);
}
}
for(i=2; i<=n; i++){
if(t[i][i] > t[i-1][i-1]){
j=i-1;
for(i=1; i<=n; i++){
aux=t[i][j];
t[i][j]=t[i][j+1];
t[i][j+1]=aux;
}
i=j;
for(j=1; j<=n; j++){
aux=t[i][j];
t[i][j]=t[i+1][j];
t[i+1][j]=aux;
}
i=1;
}
i++;
}
for(i=1; i<= n; i++){
free(t[i]);
}
free(t);
今、私が手にエラーは次のとおりです:
The matrix inserted:
1 2 3
4 5 6
7 8 9
The matrix after swapping:
5 4 6
2 1 3
8 7 9
*** glibc detected *** ./6: double free or corruption (out): 0x08e42018 ***
======= Backtrace: =========
/lib/i686/cmov/libc.so.6[0xb7649764]
/lib/i686/cmov/libc.so.6(cfree+0x96)[0xb764b966]
./6[0x80488fb]
....
は、事前にありがとう!それのサイズがNある場合
はなぜ '**代わりT'の[配列の配列(http://c-faq.com/~scs/cclass/int/sx9.html)を使用していません?それはあなたのコードをより読みやすくします –
もし私が動的に割り当てられた配列を使う義務がなければ、私はそれをやったでしょう。配列の配列を使用していれば、読みやすくなっていると私は同意します。 (もし私が何かを得なかったら私を修正してください。) – Constantin