如何在C中为动态二维数组赋值

时间:2014-12-03 21:32:16

标签: arrays 2d

我想创建一个动态的二维数组并分配值,我无法理解我的错误。

我的代码:

#include <stdio.h>
#include <stdlib.h>


void main () {

    int **a;
    int k;
    int nrows, ncols;
    int i, j, x;

    printf("Enter number of rows and columns: \n");
    scanf("%d%d",&nrows,&ncols);

    if( (nrows >=5 && nrows <=10) || (ncols >=5 && ncols <=10) )
    {
        if(nrows == ncols){
            a = (int **)malloc(nrows * sizeof(int *));
            if (a == NULL)
                exit(1);
        }else{
            printf("Rows must be equal to Columns\n");
            exit(1);
        }
    }else{
        printf("Rows or Columns must be between 5 to 10\n");
        exit(1);
    }

    for(i = 0 ;i < nrows ; i++) {
        *(a+i) = (int *)malloc(ncols * sizeof(int));
        if(*(a+i) == NULL) {
            for(k = 0; k < i; k++){
                free(a[k]);
                free(a);
                exit(1);
            }
        }
    }


    printf("Write down your array:\n");

    for(i = 0 ; i < nrows; i++){

        *a =  *(a + i);
        for(j = 0; j < ncols; j++){

            scanf("%d", &x);
            *(*a + j) = x;
        }

    }


        printf("Your array is:\n");
       for(i = 0 ; i < nrows; i++){

        *a = *(a+i);
        for(j = 0; j < ncols; j++){

            printf("%d ", *(*a + j) );
        }

        printf("\n");
    }

}

1 个答案:

答案 0 :(得分:0)

*a =  *(a + i);

是问题:您正在更改第一列指针。你可能想在这里做类似

的事情
int* tempColumnPointer = *(a + i);

一些提示:

  1. a[i]*(a + i)
  2. 更具可读性
  3. 您甚至可以使用a[i][j]代替*(*(a + j) + i)
  4. 为什么不将矩阵分配为单个内存块?