Указатели списка STL в переполнении стека

Как я могу получить доступ к списку в C ++, сняв ссылку на указатель списка?

Я получаю ошибку bad_alloc при выполнении:

 List My_List = *ls;

ls это List*, до этого в коде у меня было:

List* ls = & Temp_List;

Я использовал значение ls как целое число Я прошел через разные функции. Теперь, когда я хочу вернуть его List* и отмените ссылку, я получаю ошибку

0

Решение

Если вы разместите список в стеке, его адрес может измениться. Но если вы разместите его в куче, вы не потеряете указатель на список (новый или malloc)

1

Другие решения

Попробуйте это и увидите,

List *My_List = ls;
0

На самом деле, вы разыменовали указатель списка в этом фрагменте кода: *ls;

А потом ты созданный новый объект списка в стеке в этом коде:List My_List а также скопированный Ваш список в этот список в этом фрагменте кода:
<newly created list> = <your list reference>

(хех. после применения оператора разыменования вы получаете ссылку. Это c ++ для вас)

и во время этой копии вы, вероятно, получите std :: bad_alloc, потому что копирование списков связано с выделением памяти, и, вероятно, ваш оригинальный список уничтожен, и, следовательно, ваш указатель на исходный список указывает на какой-то случайный мусор, и на основе этой программы для мусора определяет, сколько памяти ему следует выделить для копирования списка. Поэтому убедитесь, что ваш первоначальный список еще жив.

Или исправьте свой код следующим образом: List& My_List = *ls и получить аварию где-то позже.

0
По вопросам рекламы [email protected]