C/C++ - Динамическое выделение памяти с помощью new и присваивание указателей

Ответить
Аватара пользователя
mrcnn

C/C++ - Динамическое выделение памяти с помощью new и присваивание указателей

Сообщение mrcnn »

Код:

Код: Выделить всё

char *p=new char[5];
char *t=new char[2];
p=t;

Как изменяется p при присваивании p=t? Допустимо ли оно?

То, что оно указывает на область памяти на которую указывает t это понятно. Но память была выделена разная по объему. Объем p требуется сохранять.

Посоветуйте книги, где объясняются подобные тонкости.
Аватара пользователя
EvgeniyQQQ

Re: C/C++ - Динамическое выделение памяти с помощью new и присваивание указателей

Сообщение EvgeniyQQQ »

Цитата mrcnn:



Как изменяется p при присваивании p=t? Допустимо ли оно?
C/C++ - Динамическое выделение памяти с помощью new и присваивание указателей




p - это всего лишь переменная хранящая адрес на первый байт блока памяти который Вы выделили оператором new. char - сообщает компилятору, какого типа данные там будут храниться, а так же сообщает сколько памяти нужно выделить (в Вашем случае 1 байт x 5 и 1 x 2, если бы указали тип wchar_t, то было бы 2x5 и 2x2, тоесть памяти под этот тип данных необходимо в 2 раза больше).

Если Вы присвоите p адрес содержащийся в t, то p просто будет указывать на первый байт блока памяти выделенный во второй строке Вашего кода. При этом блок памяти выделенный в первой строке будет утерян и превратиться в мусор.

Компилятор не контролирует сколько памяти было выделено для конкретного объекта (p или t), эта процедура ложиться на плечи самого программиста.
Ответить

Вернуться в «Программирование и базы данных»