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 值是错误的。j 从 0..m-1 开始,我从 0..n-1 开始。你的输入应该在 &matrix[j][i] 之前。要么将 while 循环更改为 i < m 和 j < n。

于 2013-05-29T20:51:03.803 回答
1

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

于 2013-05-29T20:48:44.940 回答
0

据我了解,如果您在严格的 ANSI 模式下编译,则数组必须至少有 1 个元素。

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

如果我不正确,请纠正我

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

亲切的问候

于 2013-05-29T20:55:45.730 回答