В настоящее время я изучаю указатели в моей книге C ++ (Программирование: Принципы и практика с использованием C ++ от Страуструпа).Книга заставила меня сделать следующее «упражнение», чтобы привыкнуть к указателям и массивам.Я прокомментировал части упражнения, которые не имеют отношения к моей проблеме.
int num = 7;
int* p1 = #
// output p1 address and content...
int* p2 = new int(10);
// initialise each element, and output content...
int* p3 = p2;
p1 = p2;
// output p1 and p2 address and content...
delete[] p1;
/* As all pointers now point to the same array created in the free store,
I was under the impression that I only needed to use delete for 1 of
the pointers to deallocate memory,as above, but the program crashes
if I don't do it for all 3 and execute next section of code? */
p1 = new int(10);
p2 = new int(10);
// Initialise each array to a different range of numbers using a loop,
// output each array, change elements in p2 to be the same as p1, output...
delete[] p1;
delete[] p2;
В последней части у меня возникли проблемы.При выводе каждого массива значения элементов совпадают.Я предполагаю, что p1 все еще == p2, из-за кода несколькими строками раньше.Я думал, что когда вы используете ключевое слово «new», оно возвращает адрес, ссылаясь на другой, недавно выделенный блок памяти, и поэтому p1 больше не будет == p2.Единственный способ заставить его работать - это напрямую создать 2 массива и сделать так, чтобы p1 и p2 ссылались на них с помощью оператора &.Любое объяснение того, что я делаю неправильно, приветствуется.