代码之家  ›  专栏  ›  技术社区  ›  Vali RO

在主函数中调用C-2d数组打印函数时,该函数不工作

  •  1
  • Vali RO  · 技术社区  · 3 年前

    代码如下:

    void print(int** mat, int lin, int col) {
        int i,j;
        printf("Matrix is:\n");
        for(i=0; i<lin; i++) {
            for(j=0; j<col; j++) {
                printf("%d ", *(*(mat+i)+j));
            }
            printf("\n");
        }
    }
    
    int** readMatrix(int** mat, int lin, int col) {
        int x;
        int i,j;
        mat==(int**)malloc(lin*sizeof(int*));
        for(x=0; x<lin; x++) {
            mat[x]=(int*)malloc(col*sizeof(int));
        }
        
        for(i=0; i<lin; i++) {
            printf("Line %d: ", i);
            for(j=0; j<col; j++) {
                scanf("%d",  &mat[i][j]);
            }
        }
    }
    
    
    int main()
    {
        int lin, col;
        int i,j;
        printf("Enter number of lines: ");
        scanf("%d", &lin);
        printf("Enter number of cols: ");
        scanf("%d", &col);
        int** mat = readMatrix(mat,lin,col);
        print(mat,lin,col);
        return 0;
    }
    

    在我接受输入后,我得到消息“矩阵是”,但矩阵没有出现,为什么?

    如果我在readMatrix函数中调用print函数,它会工作,但是如果我在main中调用它,为什么它不工作呢?

    2 回复  |  直到 3 年前
        1
  •  1
  •   Eric Postpischil    3 年前

    readMatrix mat

    被宣布返回 int ** return 陈述

    mat==(int**)malloc(lin*sizeof(int*)); 使用 == ,它比较值。它不执行赋值。

    移除 小地毯 读取矩阵 小地毯 读取矩阵 . 纠正错误 = . 添加 回来 返回 读取矩阵 .

        2
  •  1
  •   Vlad from Moscow    3 年前

    readMatrix

    int** readMatrix(int** mat, int lin, int col) {
        int x;
        int i,j;
        mat==(int**)malloc(lin*sizeof(int*));
        //...
    

    此外,函数不返回任何内容,尽管其返回类型不是void。

    所以这张唱片

    int** mat = readMatrix(mat,lin,col);
    

    调用未定义的行为。

    int** readMatrix( int lin, int col);
    

    并在函数的末尾写入

    return mat;
    

    例如

    int** readMatrix(int lin, int col) {
        int **mat==(int**)malloc(lin*sizeof(int*));
        //...
    
        return mat;
    }
    

    int** mat = readMatrix(lin,col);
    

    同样,在不再需要阵列时,您应该释放所有分配的内存。

    for ( i = 0; i < lin; i++ )
    {
        free( mat[i] );
    }
    
    free( mat );