Динамически изменяемый входной буфер для консольной игры на C - PullRequest
0 голосов
/ 04 мая 2011

Эй, я пытаюсь переписать код на C ++ для работы в C. Я просто пытаюсь найти эквивалент для новых и удалить в C, но это не совсем работает, вот мой код:

Вот код на C ++:

  // Gets the number of events
ReadConsoleInput(rHnd, eventBuffer, numEvents, &numEventsRead);
  // Sizes the eventbuffer based on the number of events
INPUT_RECORD *eventBuffer = new INPUT_RECORD[numEvents];

  // Removes from memory:
delete[] eventBuffer;

Вот что у меня есть в C:

  // Event buffer 
INPUT_RECORD *eventBuffer;
  // Gets the number of events
ReadConsoleInput(rHnd, eventBuffer, numEvents, &numEventsRead);
  // Sizes the event buffer based on the number of events.
eventBuffer = malloc(numOfEvents * sizeof(*eventBuffer));
  // Removes from memory:
free(eventBuffer);

Код выше почти работает с одной ошибкой: Ошибка: значение типа «void *» не может быть присвоено объекту типа «INPUT_RECORD *»

Ответы [ 2 ]

3 голосов
/ 04 мая 2011

Вы просто должны разыграть его -

eventBuffer = (INPUT_RECORD*) malloc(numOfEvents * sizeof(*eventBuffer));

Конечно, кто-то придет и скажет, что стандарт гласит, что вам не нужно приводить результат "malloc". Очевидно, что в этом случае стандарт не имеет значения:)

1 голос
/ 04 мая 2011

Ваш код C ++ не работает.Вы передаете eventBuffer в ReadConsoleInput(), но только позже вы объявляете это:

  // Gets the number of events
ReadConsoleInput(rHnd, eventBuffer, numEvents, &numEventsRead);
  // Sizes the eventbuffer based on the number of events
INPUT_RECORD *eventBuffer = new INPUT_RECORD[numEvents];

Если ReadConsoleInput() для чего-то нужно eventBuffer, вам необходимо объявить его перед вызовом функции.

В любом случае эквивалентный код C будет:

INPUT_RECORD* eventBuffer;
ReadConsoleInput(rHnd, eventBuffer, numEvents, &numEventsRead);
eventBuffer = (INPUT_RECORD*) malloc(numOfEvents * sizeof(INPUT_RECORD));
...