0

動的行列を使用して小さなプログラムを作成しようとしていました (C で開始しましたが、C++ で行う必要があることがわかりました)。その主要部分は次のようになりました。

int main()
{
    int n,m,i,j,k;
    printf("Matrix A n x m:\n");
    printf("Input n: ");
    scanf("%d",&n);
    printf("Input m: ");
    scanf("%d",&m);
    int** matrix = new int*[m]; 

    if (matrix == NULL) {
        printf("no memory\n");
        system("pause");
        exit(1);
    }

    for(k=0; k<m; ++k)
    {
        matrix[k]=new int[n];

        if(matrix[k]==NULL)
        {
        printf("error");
        }    
    }    

    j=0;

    do
    {
        i=0;
        do
        {
            printf("input (%d,%d):", i,j);
            scanf("%d", &matrix[i][j]);
            i++;
        }   
        while (i<n); 
    j++;
    }    
    while (j<m);
}

エラーなしでコンパイルできますが、正しく動作しません。たとえば、2x4 マトリックスは作成できますが、4x2 は作成できません。Input (3,0) メッセージが表示された後、プログラムがクラッシュします。なんで?

4

3 に答える 3

1

あなたはiとjの間を混ぜました、あなたはするべきですscanf("%d", &matrix[j][i]);

于 2013-05-29T20:48:44.940 に答える
1

i と j の値が間違っています。j は 0..m-1 から始まり、i は 0..n-1 から始まります。入力は &matrix[j][i] の前にある必要があります。それか、while ループを i < m および j < n に変更します。

于 2013-05-29T20:51:03.803 に答える