Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Динамическое выделение памяти с помощью new и присваивание указателей (http://forum.oszone.net/showthread.php?t=112569)

mrcnn 29-07-2008 15:08 863634

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

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

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

EvgeniyQQQ 29-07-2008 17:00 863776

Цитата:

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

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


Время: 07:12.

Время: 07:12.
© OSzone.net 2001-