При удалении моего класса циклического связанного списка переменная L превращается в случайные адреса.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 При удалении моего класса циклического связанного списка переменная L превращается в случайные адреса.

Сообщение Anonymous »

Я создаю класс циклического связанного списка на C++, все работает как положено, за исключением случаев, когда я удаляю объект, созданный на основе моего класса. В деструкторе я удаляю каждый отдельный элемент плюс сам L в конце и устанавливаю для него значение nullptr, поэтому, когда пользователь снова пытается использовать функции объекта, if (L == nullptr) return; остановит их.
проблема в том, что L = nullptr на самом деле работает нормально, но когда я использую другую функцию, например printArray() или любой другой, например get() на самом деле показывает, что L равен 4 очень случайным адресам памяти, и последний каким-то образом указывает на сам L! (на самом деле это та ситуация, когда я удаляю L, но когда я устанавливаю для него значение nullptr, он будет 0x0, что означает, что он не указывает на эти случайные адреса). Я столько раз отслеживал код и даже получал помощь от ИИ, но даже ИИ говорит, что с кодом все в порядке.

Код: Выделить всё

class list
{
private:
#include 

unsigned int size;
struct node {
int item;
node *next = nullptr;
};
node *L;
bool deleted;
public:
list(/* args */) {
size = 0;
L = new node;
L->next = L;
deleted = false;
}
~list() {
if (L != nullptr) {
popAll();
std::cout next next->item = item;
L->next->next = p;
size++;
}
void pushIn(int index, int item) {
if (deleted && L == nullptr) return;

if ((size == 0 && index != 0) /*This will ignore -1 as the ending index*/ || (L->next == L && index != 0 && index != size-1)) std::cout next->next = L;
size++;

}
void pop(int index) {
if (deleted && L == nullptr) return;
if (size == 0) std::cout next = L;
size = 0;
}
};
У меня также есть удаленное логическое значение, но это просто запасной вариант, если это снова не удастся. Потому что, если я использую удаленный в качестве детектора удаления объекта, он будет работать нормально, но я хочу знать, почему L является нулевым после того, как я установил его в деструктор, но он не меняет его в других функциях, и создается впечатление, что он был только удален и даже не установлен в значение nullptr.

Подробнее здесь: https://stackoverflow.com/questions/792 ... -random-ad
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»