динамический массив в с - PullRequest
       3

динамический массив в с

0 голосов
/ 27 января 2011

Я хочу, чтобы после некоторых вычислений я создал массив в C Не могли бы вы мне помочь?

int len_arr = (sizeof inputs)/(sizeof inputs[0]);
int half_arr = len_arr / 2;
if(len_arr%2 != 0)
    half_arr++;

int m[half_arr][half_arr];

Ответы [ 3 ]

4 голосов
/ 27 января 2011

Я предполагаю, что вы хотите создать матрицу с размером строки / столбца half_arr.

int i;
int len_arr = (sizeof inputs)/(sizeof inputs[0]); 
int half_arr = len_arr / 2; 
if(len_arr%2 != 0)     
    half_arr++;  

int **m = malloc(half_arr * sizeof(int));

for (i = 0; i < half_arr; i++)
    *m = malloc(half_arr * sizeof(int));

Затем вы сможете получить доступ к m, используя m[row][column] или m[column][row].

2 голосов
/ 27 января 2011

Вам необходимо использовать malloc для выделения вашего 2-мерного массива.

Посмотрите на это ССЫЛКА для хорошего объяснения.


РЕДАКТИРОВАТЬ:

Начиная с кода напо данной ссылке я написал фрагмент кода, который должен работать.

Некоторые отличия от кода Джеймса:

  • объявление m в верхней части блока кода
  • преобразование из возвращаемого типа malloc (void *) в правильный
  • освобождение памяти в конце
  • это полный код, который должен работа: P

#include <stdlib.h>

int main ()
{

    // just an example of inputs...
    int inputs[3][7];

    // your code
    int i;
    int **m;
    int len_arr = (sizeof inputs)/(sizeof inputs[0]); 
    int half_arr = len_arr / 2; 
    if(len_arr%2 != 0)     
        half_arr++;  

    // allocation of the array
    m = (int **)malloc(half_arr * sizeof(int *));
    for(i = 0; i < half_arr; i++)
        m[i] = (int *)malloc(half_arr * sizeof(int));

    // use the array as you like...
    // ...

    // let's release the allocated memory properly
    for(i = 0; i < half_arr; i++)
        free(m[i]);
    free(m);

}
0 голосов
/ 27 января 2011

Ваш код действителен C99.Возможно, вы захотите использовать компилятор, который поддерживает более новые версии языка C.

В Windows я бы пошел с MinGW редакцией gcc .Если вы застряли в MSVC, я предлагаю вместо этого использовать C ++: стандартные типы контейнеров сделают вашу жизнь менее болезненной.

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