Rick York
Ричард прав. В общем, в C++ вы должны использовать new и delete, но еще лучше использовать STL-объекты. Std::vector<puchar> скорее всего, сработает для вас.
В редких случаях я использую calloc и free я использую этот маленький макрос :
#define AllocateMemory(count,type) (type*)calloc(count,sizeof(type))
// example usage to get 50 pointers :
PUCHAR * m_buffer = AllocateMemory( 50, PUCHAR );
Приведение не требуется, потому что оно выполняется в макросе.
Вы действительно хотите, 50 указателей или вы хотите, чтобы массив из 50 байт? Это не ясно из вашего вопроса, потому что он смешивает их. Пример показывает, как получить 50 указателей. Используя макрос, вот как получить 50 байт :
UCHAR * m_buffer = AllocateMemory( 50, UCHAR );
Rick York
Я пересмотрел второй пример, чтобы он соответствовал первому. Это то, что вы имели в виду, или это ПУЧАР?
Richard MacCutchan
Нет, это квадратные скобки, которые объявляют переменную как массив, а не указатель. Так и должно быть:
PUCHAR m_buffer = AllocateMemory( 50, UCHAR );
// or
UCHAR* m_buffer = AllocateMemory( 50, UCHAR );
Rick York
Хорошо - я изменю это. Спасибо.
Это то, о чем я часто забываю. Эта нотация не работает в таких объявлениях, поэтому я обычно вообще избегаю ее использовать.