Это фрагмент кода, я использую:Присвоение значений указателей в C++
void Move::AddToMovesList(Location* &list, int row, int col) {
// If the list is empty, create the first item
if (list == NULL)
list = new Location(row, col);
// List exists, so append
else
list->Add(row, col);
}
Если list
является NULL
, новый Location
должен быть создан и указатель list
должен указывать, что новое место. Это поведение, которое я ожидаю от этого кода, но перед тем как gdb завершит эту функцию, я заметил, что list
по-прежнему NULL
. Что я здесь делаю неправильно?
Я использовал амперсанд в Location* &list
, чтобы убедиться, что я могу навсегда (по сравнению с локально) изменить поставляемый указатель.
Лично я бы не использовал указатель. Вы представляете пустой список как указатель NULL. Это означает, что вам нужно добавить код, чтобы явно проверить это везде в вашем коде. Создайте объект (который изначально представляет пустой список), а затем просто добавьте к нему членов, не требуя специального случая. –
Ваш код должен работать, вы отключили оптимизацию при отладке? –
Я не уверен, знаю ли вы, что вы там говорите, Винсент. Я использую gdb внутри Eclipse с настройками по умолчанию. Я нахожусь в Windows, и я использую компилятор MinGW C++. – Pieter