c / c ++中的动态矩阵 - 特殊错误

时间:2013-05-29 20:43:57

标签: c++ c matrix

我试图用动态矩阵编写一个小程序(我在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矩阵。出现输入(3,0)消息后,程序崩溃。为什么呢?

3 个答案:

答案 0 :(得分:1)

你在i和j之间混合,你应该scanf("%d", &matrix[j][i]);

答案 1 :(得分:1)

你的i和j值是错误的方式。 j从0..m-1开始,我从0..n-1开始。你的输入应该是fore&amp; matrix [j] [i]。或者将while循环更改为i&lt; m和j&lt; Ñ

答案 2 :(得分:0)

据我所知,如果你在严格的ANSI模式下编译,数组必须至少有1个元素。

int m[];          /*ILLEGAL*/
int m[0];        /* definition of 0 size -- ILLEGAL */

如果我不正确,请纠正我

如果要在严格的ANSI模式下编译,则必须声明数组元素(至少)有一个元素

亲切的问候