массив размещения указателей

typedef struct { struct table **symbols; // массив стека int top; //индекс верхнего элемента int size; //максимальный размер стека }stack;

void *createStack(int size)
{
  stack *stck;
  stck = (stack *) malloc(sizeof(stack));

  stck->symbols  = ....

  stck->size = size;
  stck->top = -1;
  printf("stack is created --> size is : %d \n",size);
}

Здесь мне нужно выделить массив символов моего стека, который равен "...", но я не смог понять его синтаксис, пожалуйста, помогите :)


person iva123    schedule 21.12.2009    source источник
comment
Не забудьте проверить успешность выполнения malloc!   -  person JaakkoK    schedule 21.12.2009
comment
Избегайте malloc, если вы знаете точный размер во время компиляции. Насколько большой массив?   -  person Hamish Grubijan    schedule 21.12.2009


Ответы (3)


(struct table **)malloc(size * sizeof(struct table*));

Но это если вы хотите заранее выделить все пространство сразу. Если вы хотите выделить больше по ходу работы, вы можете начать с чего-то меньшего, чем size, и выделить больше в своей функции push(), когда у вас закончится место.

person Seth    schedule 21.12.2009

Предполагается ли, что символы представляют собой одномерный массив указателей на структурную таблицу или двумерный массив структурной таблицы?

stck->symbols = malloc(sizeof *(stck->symbols) * numberOfElements);

для любого значения numberOfElements. Учитывая, что тип stck->symbols равен struct table **, тип выражения *(stck->symbols) будет struct table *. Вы также можете написать

malloc(sizeof (struct table*) * numberOfElements);

но я предпочитаю первый метод, так как он сводит к минимуму количество мест, где вам нужно запомнить шрифт.

Поскольку это C, вам не нужно приводить результат malloc(), и это считается плохой практикой; если вы забыли включить stdlib.h или иным образом не имеете прототипа для malloc() в области видимости, приведение подавит предупреждение, предупреждающее вас о проблеме (хотя, поскольку C99 больше не разрешает неявную типизацию int, это может больше не быть проблемой ).

person John Bode    schedule 21.12.2009

person    schedule
comment
Возможно, желательно включить актерский состав. - person Skurmedel; 21.12.2009
comment
Нет, в C явное приведение не требуется. - person Prasoon Saurav; 21.12.2009
comment
Плохо :)... тогда просто я люблю быть откровенным. - person Skurmedel; 21.12.2009
comment
Явное приведение возвращаемого значения malloc в C может скрыть ошибки (например, пренебрежение #include stdlib.h). Избегайте этого. - person jamesdlin; 21.12.2009