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

179
08 ноября 2017, 02:22

Доброго всем времени суток! Хочу уточнить, правильно ли я понимаю теорию. Имеем такое:

int *p = new int;
*p = 5;
cout << p;
cout << &p;
cout << *p;

Правильно ли я понимаю:

  1. при удачном выполнении операции [int *p = new int;] у нас в оперативной памяти происходит выделение диапазона ячеек, достаточного для хранения переменной типа int?
  2. при этом указатель p хранится в стеке как локальная переменная и хранит выделенный в куче адрес этого самого диапазона ячеек и именно его мы видим через [cout << p]
  3. а через [cout << &p], получается, мы видим адрес этой нашей локальной переменной?

Спасибо!

Answer 1

Да, да и да. Пожалуйста.           

Answer 2

Выглядит правдноподобно. Но есть "мелочи".

В втором пункте обычно в переменной будет хранится адрес начала "диапазона памяти". Некоторые менеджеры памяти могут выделить немного больше памяти и дать указатель в середину. По "отрицательным" смещениям может хранится различная информация для менеджера памяти. Но это детали реализации и обычного программиста они интересуют только когда "все сломалось".

Но самое главное - Вы забыли пункт 4 - также в этом коде есть утечка памяти:)

READ ALSO
Загрузчик 3d моделей. С++ OpenGL

Загрузчик 3d моделей. С++ OpenGL

Знаю есть библиотека загрузчик 3d моделей AssimpЕсть ли альтернатива

193
Компиляция проекта на C++ из заголовочного файла

Компиляция проекта на C++ из заголовочного файла

Как компилировать проект на C++, находясь в *h файле? Это жутко неудобно, сделав изменения в заголовочном файле, переключаться на какой-либо...

226
Какие три ошибки обнаружит компилятор в следующем примере? [требует правки]

Какие три ошибки обнаружит компилятор в следующем примере? [требует правки]

Нашёл одну ошибку в строке "myDogAge=4;", оставшиеся две никак не могу

185