前に尋ねられた場合は、事前に謝罪します。見つけられませんでした。C行列の次元が宣言と異なる
これは実用性がほとんどない奇妙なバグです。ここでは、コードは次のとおり
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void print_matrix(int a[4][3], int i, int j)
{
printf("a[%d][%d] = %d\n", i, j, a[i][j]);
return;
}
int main(void)
{
int i, j;
int array[3][5];
for (i = 0; i < 3; i++)
{
for(j = 0; j < 5; j++)
{
scanf("%d",&(array[i][j]));
}
}
printf("array[2][1] = %d\n", array[2][1]);
print_matrix(array, 2, 1);
printf("array[0][4] = %d\n", array[0][4]);
print_matrix(array, 0, 4);
return 0;
}
I [3]、それは奇妙な結果を返す[5] [3]のサイズの行列を宣言し、私は別の関数でこの行列を使用して、サイズとそれを呼び出すとき[4] 。誰かがこのシナリオでメモリにアクセスする方法を説明できますか?
コンパイラから警告があります。すべての警告を有効にしてコンパイルします。 –
関数を 'void print_matrix(int x、int y、int a [x] [y])'に変更するだけです。 Cはサイズがゼロの配列を許可しないことに注意してください。 – Lundin