Как я могу получить доступ к списку в C ++, сняв ссылку на указатель списка?
Я получаю ошибку bad_alloc при выполнении:
List My_List = *ls;
ls
это List*
, до этого в коде у меня было:
List* ls = & Temp_List;
Я использовал значение ls
как целое число Я прошел через разные функции. Теперь, когда я хочу вернуть его List*
и отмените ссылку, я получаю ошибку
Если вы разместите список в стеке, его адрес может измениться. Но если вы разместите его в куче, вы не потеряете указатель на список (новый или malloc)
Попробуйте это и увидите,
List *My_List = ls;
На самом деле, вы разыменовали указатель списка в этом фрагменте кода: *ls;
А потом ты созданный новый объект списка в стеке в этом коде:List My_List
а также скопированный Ваш список в этот список в этом фрагменте кода:
<newly created list> = <your list reference>
(хех. после применения оператора разыменования вы получаете ссылку. Это c ++ для вас)
и во время этой копии вы, вероятно, получите std :: bad_alloc, потому что копирование списков связано с выделением памяти, и, вероятно, ваш оригинальный список уничтожен, и, следовательно, ваш указатель на исходный список указывает на какой-то случайный мусор, и на основе этой программы для мусора определяет, сколько памяти ему следует выделить для копирования списка. Поэтому убедитесь, что ваш первоначальный список еще жив.
Или исправьте свой код следующим образом: List& My_List = *ls
и получить аварию где-то позже.