Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Указатель С++ и динамическая память

#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 - также в этом коде есть утечка памяти:)

Комментариев нет:

Отправить комментарий