Динамически распределяя матрицу с плавающей точкой? - PullRequest
0 голосов
/ 06 апреля 2011

Есть ли способ, как malloc() 2D матрица в C? Я успешно попытался malloc() 1D-поле, но в матрице я получаю ошибки.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

float * mat2d = malloc (строки * столбцы * sizeof (float) ));

для доступа к значению из матрицы используйте эту схему адресации:

float val = mat2d [x + y * cols];

1 голос
/ 06 апреля 2011

Если размер массива не известен во время компиляции, вы должны использовать цикл для выделения памяти для каждой строки.

Вот пример кода, который я нашел:

double** allocate2D(int nrows, int ncols) {
  int i;
  double **dat2;
  /*  allocate array of pointers  */
  dat2 = malloc( nrows*sizeof(double*));

  if(dat2==NULL) {
    printf("\nError allocating memory\n");
    exit(1);
  }
  /*  allocate each row  */
  for(i = 0; i < nrows; i++) {
    dat2[i] = malloc( ncols*sizeof(double));
  }
  if(dat2[i-1]==NULL) {
    printf("\nError allocating memory\n");
    exit(1);
  }
  return dat2;
}

С здесь

Обязательно измените тип данных с двойного на все, что вам нужно.

...