Указатель не инициализируется структурой в качестве параметра.Положение о нарушении прав доступа 0x00000010. - PullRequest
0 голосов
/ 22 октября 2010

Структура выглядит так:

template <class Node_entry>
Node<Node_entry>::Node(Node_entry item, Node *add_on)
{
    entry = item;
    next = add_on;
}

И указатель * new_rear не инициализируется, но & item заполнен пользовательским вводом.

   Error_code Extended_queue::append(const Queue_entry &item) {
        Node<Queue_entry> *new_rear = new Node<Queue_entry>(item);
        if(new_rear = 0)
            return overflow;
        if(rear = 0){
            front = new_rear;
            rear = new_rear;
        }
        else {
            rear->next = new_rear;
            rear = new_rear;
        }
        return success;
    }

В местных жителей в VS2010 this и new_rear оба (!) В следующем и записи, элемент хорош. Что я делаю, чтобы получить это?

«Место записи нарушения доступа 0x00000010.»

1 Ответ

6 голосов
/ 22 октября 2010

Полагаю, вы хотели сказать if (new_rear == 0), а не if (new_rear = 0)? Ваш компилятор должен был дать вам предупреждение.

РЕДАКТИРОВАТЬ: В случае, если вам интересно, почему это происходит сбой - ну, вы присваиваете 0 указателям, что также приводит к тому, что условия оцениваются как ноль, так что вы попадаете в блок else с «тылом», который только что был назначен 0, так что «вы-> следующий» в конечном итоге записывает в 0x10.

Кстати, именно поэтому я всегда компилирую с самым высоким уровнем предупреждений, а предупреждения рассматриваются как ошибки. Предупреждения твои друзья.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...