память удаляется без вызова delete c ++ - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть функция, которая создает новый узел и помещает его на правильное место в списке, связанном указателями.Однако я запустил тест и напечатал адрес каждого узла, когда создал его, и заметил, что он одинаков.Я не вызываю удаление, и я использую новый, поэтому мне было интересно, где моя память удаляется.Я звоню новым на "Узле".Этот код находится в методе класса, который не является классом Node, но находится в том же файле .h.

вызов нового:

image

ячеек памяти:

image

1 Ответ

0 голосов
/ 05 декабря 2018

В показанном вами коде N - это локальная переменная, которая создается и уничтожается при каждом входе и выходе из блока.Не удивительно, что он всегда имеет один и тот же адрес.Ваш код ничем не отличается от этого:

for (int i = 0; i < 10; ++i)
{
    int j = i;
    cout << "Value: " << j << " Location: " << &j << endl;
}

Каждая итерация цикла создает новый экземпляр j в начале и уничтожает этот новый экземпляр в конце.Даже если у каждого j есть свое значение, все они могут жить по одному и тому же адресу, поскольку имеют непересекающиеся времена жизни.Вы можете видеть, какое значение вы храните в j, не имеет значения.Таким образом, это, вероятно, также покажет разные значения, но в одном и том же месте.

Использование new не имеет значения, поскольку вы не сохраняете значение, которое оно вам дает.Вы разыменовываете это и выбрасываете.

...