struct С массивом структуров неизвестного размера

Я пытался обернуть голову в этом целый день ...

в основном, у меня есть структура По имеющему названное состояние, которое имеет имя и еще один под названием Statemachine с именем, множество состояний и общее количество государств, добавленных:

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

typedef struct State {
  const char * name;

} State;

typedef struct StateMachine {
  const char * name;

  int total_states;
  State ** states;

} StateMachine;

StateMachine * create_state_machine(const char* name) {
  StateMachine * temp;

  temp = malloc(sizeof(struct StateMachine));

  if (temp == NULL) {
    exit(127);
  }

  temp->name = name;
  temp->total_states = 0;

  temp->states = malloc(sizeof(struct State));
  return temp;
}

void destroy_state_machine(StateMachine* state_machine) {
  free(state_machine);
}

State * add_state(StateMachine* state_machine, const char* name) {
  State * temp;

  temp = malloc(sizeof(struct State));

  if (temp == NULL) {
    exit(127);
  }

  temp->name = name;

  state_machine->states[state_machine->total_states]= temp;
  state_machine->total_states++;

  return temp;
}

int main(int argc, char **argv) {

  StateMachine * state_machine;

  State * init;
  State * foo;
  State * bar;

  state_machine = create_state_machine("My State Machine");

  init = add_state(state_machine, "Init");
  foo  = add_state(state_machine, "Foo");
  bar  = add_state(state_machine, "Bar");

  int i = 0;

  for(i; i< state_machine->total_states; i++) {
    printf("--> [%d] state: %s\n", i, state_machine->states[i]->name);
  }

}

по какой-то причине (читайте низкий C-FU / годы RUBY / PYTHON / PHP) Невозможно выразить тот факт, что государства - это массив государств. Приведенные выше код печатает:

--> [0] state: ~
--> [1] state: Foo
--> [2] state: Bar

Что произошло с добавленным первым состоянием?

, если я Malloc, на массиве состояний на первом состоянии добавлен (например, STATE_MACHINE = MALLOC (SIZEOF (TEMP)); тогда я получаю первое значение, но не второй.

Любые советы?

Это вопрос CCC 4.1 Я использую GCC 4.2.1 для компиляции образца.

12
задан apann 31 August 2011 в 21:42
поделиться