использование malloc приводит к ошибке - PullRequest
2 голосов
/ 21 ноября 2011

Я пытаюсь перевести некоторый код из цели c в неуправляемый c ++ У меня есть эта операция

Buffer* ir =malloc( sizeof( Buffer ) );

ошибка: выражение должно иметь указатель на тип? та же ошибка входит в этот код

ir->buffer = malloc( bufferSize );

Не могли бы вы предоставить мне правильное использование malloc в этом неуправляемом c ++?

Ответы [ 3 ]

6 голосов
/ 21 ноября 2011

malloc() возвращает void *, что может привести к этой проблеме. Вы можете разыграть возврат:

Buffer *ir = (Buffer *)malloc(sizeof(Buffer));

или, если вы используете C ++, вы должны использовать new вместо:

Buffer *ir = new Buffer;

(Если вы это сделаете, не забудьте изменить free() на delete).

1 голос
/ 21 ноября 2011

Попробуйте

Buffer *ir = (Buffer*) malloc (sizeof(Buffer));

Однако лучший способ C ++ - это иметь конструктор в классе Buffer, а затем использовать что-то вроде

Buffer *ir = new Buffer;

или, возможно, (если конструктор принимает некоторые аргументы)

Buffer *ir = new Buffer(args);
0 голосов
/ 21 ноября 2011

Я настоятельно рекомендую вам использовать новый вместо malloc в c ++.Malloc ПОЛНОСТЬЮ не знает конструкторов, и чаще всего не рекомендуется использовать «new» (и, следовательно, это двойное «delete»).

Не забудьте использовать malloc с delete или new с freeхотя я видел, что он может сделать, и позвольте мне сказать вам, что это не приятно.

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