2012-04-22 2 views
0

первая попытка называть this-> getValue() выглядит хорошо, но только строка ниже (глава цикла while) дает мне ошибку «нарушение доступа» внутри метода getValue.Сбой вызова C++ вызывает нарушение прав доступа

if(first != 0){ 
    listElement *that = first;  

    cout << "add: " << that->getValue() << " | " << value << endl; 

    while(that->getValue() < value) {..} 
} 

Могу ли я редактировать значение во время вызова в любом месте? Метод прибудете состоит только из «возвращаемого значения» ....

+3

не хватает информации: что внутри 'getValue'? что происходит внутри тела цикла while? – Vlad

+0

Нужен весь код. Постскриптум если вы говорите правду, 'while' бесконечен –

+0

По какой причине вы не используете интеллектуальные указатели? –

ответ

4

Очевидное объяснение состоит в том, что в этом коде

while(that->getValue() < value) {..} 

внутри {..} вы делаете that = that->next; и установка that к нулевому указателю.

Вам необходимо добавить тест для that != NULL в ваш цикл while, чтобы избежать попадания в конец списка, не найдя пункт, соответствующий критерию поиска.

while(that != NULL && that->getValue() < value) 

Это помогло бы, если вы включили весь код, потому что кажется, что ключевой бит кода в {..} блоке!

+1

Эй, ты можешь одолжить мне свой хрустальный шар? – Vlad

+1

@ Vlad В коде мы видим 'listElement',' first' и 'while', все признаки связанной итерации списка. –

+0

ОК, вы правы, я вызываю next() внутри цикла while. Который я решил, установив «первые» переменные следующим указателем на 0. Но я до сих пор не понимаю, почему это вызывает ошибку в главе цикла while, будет ли это цикл do, это, очевидно, для меня. Но в этом случае заголовок while должен быть разрешен до следующего вызова – user972851

Смежные вопросы