int *p = new int;
*p = 8;
Первый оператор объявляет новую переменную p
указателем на int
и инициализирует ее адресом, возвращаемым new int
, который является действительным адресом памяти для хранения int
.Второй оператор присваивает значение 8
int по адресу памяти, на который указывает p
.
int *q;
*q = 8;
Теперь первый оператор не инициализирует указатель q
, который, следовательно, не будет иметьзначимое значение.Затем второй оператор пытается выполнить запись в адрес памяти, который, по всей вероятности, не является адресом, где такая операция разрешена, и в результате программа завершится сбоем (скорее всего, из-за ошибки сегментации).