Немного запутался:
int *a=new int;
- выделение памяти из кучи.a
- адрес начала выделенных 6 байт*a
- значение которое находится по адресу a
Неправильная запись в переменную
a=13; // 3) произошла запись не значения а адреса, то есть теперь адрес равен 13, а не какому-нибудь 0x12345678. 4)Теперь нельзя освободить часть кучи
Правильная запись в переменную
*a=13; // Разименнование указателя
Пронумеровал моменты, которые меня интересуют. Напишите какое из утверждений не верно, если такие есть
Думаю, только одно - адрес начала выделенных 6 байт - не то чтобы это невозможно, но пока даже не слышал об 6-байтных int
.
А так - все верно.
int *a=new int;
- выделение памяти из кучи.
В общем случае - да. Но, например, operator new
может быть перегружен и тогда всё будет зависеть от его работы.
a
- адрес начала выделенных 6 байт
В общем случае - нет. Например, если выделяется массив объектов non-pod
типа, то new-expression
может запросить больше памяти, и в начале выделенной памяти поместить количество созданных объектов в выделенной памяти, чтобы потом delete-expression
мог вызвать необходимое количество деструкторов для созданных объектов. При этом new-expression
вернет указатель уже не на начало выделенной памяти, а на ту память, в которой начинаются Ваши объекты, которыми Вы можете законно оперировать.
a=13;
// 3) произошла запись не значения а адреса, то есть теперь адрес равен 13, а не какому-нибудь 0x12345678.
При таком коде возникнет ошибка компиляции, т.к. неявное преобразование из int в указательный тип запрещено. Но оно разрешено для литерала 0, поэтому код a = 0;
собрался бы без проблем и да, значение бы стало равно нулю. При этом внутреннее представление указателя определяется реализацией и не обязано быть нулем. Однако, программе об этом заботиться не нужно, все необходимые преобразования из внутреннего представления в численный ноль и наоборот будут сделаны без Вашего участия.
4)Теперь нельзя освободить часть кучи
Если больше нигде нет сохраненного адреса, то да.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Дан массив, требуется найти такой подмассив с максимальной суммой элементов в нем, чтобы начало и конец отрезка были одинаковыми(вывести...
Почему подчеркивает красной линией? Я только начала все это изучать, буквально час назадЧто делать?