В первом примере -
int* Bar;
Указатели указывает на объект. Задача компилятора заключается в том, чтобы назначить память (т. Е. 4 байта) для целочисленного указателя Bar
для хранения адреса целочисленной переменной. Однако, чтобы указать место, которое оно указывает, необходимо указать для разыменования.
Это больше похоже на то, что банк дает вам счет. Просто наличие банковского счета не означает, что вы можете получать деньги из банкомата. У вашей учетной записи должны быть деньги, чтобы иметь возможность рисовать. Транзакция терпит неудачу, если у вас нет денег, а в парадигме программирования поведение не определено. Итак, ваш первый пример поведения не определен. Если моя аналогия слишком неловкая, я сожалею.
Во втором примере -
int* Bar = new int[1] ; // Here [1] is unnecessary as your Bar points to a single integer memory location.
Здесь Bar
указатель, указывающий на место допустимого целого числа и получил от свободного магазина. Таким образом, местоположение Bar
, указывающее на то, может иметь значения мусора. Итак, сделайте это, прежде чем разыгрывать. то есть,
*Bar = 10;
*Bar *= 10;
Во втором примере, так как вы управляете ресурсами, поэтому его ваша ответственность, чтобы вернуть источники обратно в свободной памяти.
Вы пытаетесь назначить адрес памяти вручную? В любом случае, я не эксперт, но я уверен, что вы никогда не говорите «новый int» или какой-либо другой примитив. – jakev
Fitst ошибается. вам нужно это новое. –