2014-02-11 2 views
0

То, что, кажется, происходит здесь, заключается в том, что мой цикл while заканчивается на 1 цикл раньше каждого раза. Он установлен так, чтобы он продолжал идти до тех пор, пока t-> next не будет NULL. хотя он всегда останавливался один раз, даже если -> следующий указатель действительно указывает на что-то. Вот код. У меня есть все официальные заявления и другие вещи, сделанные в других частях моего кода, так что я не буду размещать их здесь, чтобы держать его простоВ то время как цикл всегда заканчивается одним концом

int job_allocated(const int job) 
{ 
    ALLOCPTR t = alloclist; 


    int sizeofjob = 0; 


    while(t->next!=NULL) 
    { 

    if(t->id==job) 
    { 

     sizeofjob=sizeofjob+t->size; 
    } 

    cout << t << endl; 
    cout << t->id << endl; 
    cout << t->next << endl; 
    t=t->next; 

} 

здесь выход

0x600010540 
2 
0x600010520 
0x600010520 
3 
0x600010500 
0x600010500 
2 
0x6000104e0 

Как вы можете see -> next pointer действительно указывает на память, но по какой-то причине цикл while заканчивается сразу, а не запускается еще раз.

В моем main У меня есть 4 вакансий, которые я выделил, но цикл не перейдет к последнему.

+1

Поскольку вы, кажется, хотите идти до тех пор, пока * и не включите *, последний узел в списке, есть какая-то особая причина, по которой вы не используете 'while (t! = NULL)' (который по совпадению также предотвращает начальную нулевое разыменование в пустом списке)? Если ваш ответ «потому что я нажимаю начальный узел дозорного, мне нужно игнорировать», * не *. Значение «NULL» - прекрасный дозор, который гласит: «Я пуст». – WhozCraig

ответ

7

Должно быть while (t != NULL). Если вы пишете while (t->text != NULL), вы открываете себя до неопределенного поведения для пустого списка и заставляете цикл не обрабатывать t, когда t указывает на последний узел (помните, если t указывает на последний узел, то t->next - NULL, а цикл не будет работать).

+0

Спасибо! Я знал, что это будет очень очевидно, но я просто не мог понять это! – Shane1022

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