#cpp #указатели
Доброго всем времени суток!
Хочу уточнить, правильно ли я понимаю теорию.
Имеем такое:
int *p = new int;
*p = 5;
cout << p;
cout << &p;
cout << *p;
Правильно ли я понимаю:
при удачном выполнении операции [int *p = new int;] у нас в оперативной памяти происходит
выделение диапазона ячеек, достаточного для хранения переменной типа int?
при этом указатель p хранится в стеке как локальная переменная и хранит выделенный
в куче адрес этого самого диапазона ячеек и именно его мы видим через [cout << p]
а через [cout << &p], получается, мы видим адрес этой нашей локальной переменной?
Спасибо!
Ответы
Ответ 1
Да, да и да. Пожалуйста.Ответ 2
Выглядит правдноподобно. Но есть "мелочи". В втором пункте обычно в переменной будет хранится адрес начала "диапазона памяти". Некоторые менеджеры памяти могут выделить немного больше памяти и дать указатель в середину. По "отрицательным" смещениям может хранится различная информация для менеджера памяти. Но это детали реализации и обычного программиста они интересуют только когда "все сломалось". Но самое главное - Вы забыли пункт 4 - также в этом коде есть утечка памяти:)
Комментариев нет:
Отправить комментарий