2014-12-03 2 views
-1

Я хочу создать динамический массив 2d и присвоить значения, и я не могу понять свою ошибку.Как назначить значения динамическому массиву 2d в C

Мой код:

#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"); 
    } 

} 

ответ

0

Линия

*a = *(a + i); 

является проблемой: Вы меняете первый указатель столбца. Вы, наверное, хотели сделать здесь что-то вроде

int* tempColumnPointer = *(a + i); 

Некоторые советы:

  1. a[i] будет лучше читаемым, чем *(a + i)
  2. Вы можете даже использовать a[i][j] вместо *(*(a + j) + i).
  3. Почему бы не выделить матрицу как один блок памяти?
Смежные вопросы