Так у меня есть несколько структур ...Как переопределить память с помощью new для выделения переменных внутри структуры?
struct myBaseStruct
{
};
struct myDerivedStruct : public myBaseStruct
{
int a, b, c, d;
unsigned char* ident;
};
myDerivedStruct* pNewStruct;
... и я хочу, чтобы динамически выделять достаточно мест, так что я могу «тетср» в некоторых данных, в том числе заканчивающегося нуля. Размер базовой структуры, по-видимому, «1» (я предполагаю, потому что он не может быть равен нулю), а размер производного равен 20, что, по-видимому, имеет смысл (5 х 4).
Итак, у меня есть буфер данных, размер которого равен 29, первые 16 байтов - это int, а остальные 13 - строка.
Как я могу выделить достаточно памяти для pNewStruct, чтобы этого было достаточно? В идеале, я просто хочу пойти:
- выделить 29 байт в pNewStruct;
- memcpy из буфера в pNewStruct;
Спасибо,
Хорошо, спасибо за обратную связь. Меня соблазняет идея malloc, но я не знаком с парадигмами, которые предполагали бы, что это плохая идея? Во что бы то ни стало назовите меня n00b - альтернативно, некоторые ссылки на документацию, детализирующие это, будут гораздо более продуктивными. – acron
Если вам нужна непрерывная структура переменной длины, вам нужно положить массив в конец, а не указатель. –
Спасибо. Да, на основании ответа Ремуса, это то, что я сделал, и в сочетании с использованием malloc я получил его на работу. Чтобы пояснить, причина, по которой построена структура, заключается в том, что я могу сохранить указатель неспецифического типа, а затем просто memcpy в цикле. Процесс фактически выполняет следующие действия: - Считывает бит типа блока. - Считывает размер блока. - Mallocs - переменная-член правильного типа с расширенным размером. - Использует указатель локального базового класса, указывающий на переменную-член. - Размер Memcpy в указатель. Это работает на петле, основанной на незнании того, что следует за блоком. – acron