Перевыделение памяти с++, такое возможно?

195
01 июля 2018, 07:40

Недавно задали лабораторную домой по с++. Перерыл почти весь интернет но ответ на один вопрос так и не нашёл.

Условие: у меня есть односвязный список, в нем несколько информационных полей. Есть поле "ИМЯ" с динамически выделенной памятью, вот с ним и проблема: нужно разрешить пользователю изменить его тип на [char/int/float/double]. Это вроде не сложно, а вот вторая часть меня просто убила: нужно разрешить пользователю изменять количество байт, которые были выделены ранее. Такое вообще возможно осуществить?

Answer 1

Ну, я бы воспользовался такой штукой, как any или (как я подозреваю, именно это требуется) объединением (union). Конечно, нужно тягать дополнительное поле типа etc. Это - если бы была только первая часть задания (менять тип поля).

Судя по второй части - менять размер - мне кажется, что от вас ждут поля типа void*, или char*, память для которого выделяется как new char[size], а потом используется приведение к нужному типу (ценителей чистоты strict alias прошу не беспокоиться :)). Сложно, многословно, непонятно, зачем - но задания преподов часто необъяснимы :)

Т.е. что-то вроде

enum types { INT, CHAR, .... };
void * p = new char[sizeof(int)];
types t = INT;
// Работаем с *(int*)p как с int (см. значение t)
// Переключение на double
delete[]p;
p = new char[sizeof(double)];
t = DOUBLE;

"По-моему, так" (с) Пух

READ ALSO
Не работает border-radius

Не работает border-radius

Проблема заключается в том, что после добавления градиента для блокаlogo перестал работать border-radius

224
Как сделать такую шапку?

Как сделать такую шапку?

Как сделать такую шапку? Использовать еще сетку (в моём примере Zurb Foudation) как на картинке

213