It's 8AM and I haven't used C or with stacks in a long time; how does 'stack_anchor' become NULL? What is advancing the stack_anchor to the next value? I guess I'm wondering if you have some unintentional (obviously) conditions which would keep the loop from progressing.
On Sun, Nov 4, 2012 at 5:42 PM, Allen <[email protected]> wrote: > I'm stumped debugging a problem in a C self-study course. A "while" > expression > is hung in a loop without progressing to the body the "while" is supposed > to > execute. It seems to me this should not be possible. Can anyone see what's > going on? > > Here is the affected code snippet: > > else { //token is an operator > while (stack_anchor != NULL) { // operators on stack > while ((op_precedences[stack_anchor->value.op_code] > > op_precedences[ptoken->value.op_code]) || ((op_precedences[stack_anchor- > >value.op_code] == op_precedences[ptoken->value.op_code]) && > (op_associativity[op_precedences[stack_anchor->value.op_code]] == LEFT))) { > ptoken2 = pop(ptop); > printf("Debug: Enqueue operator-precedences to postfix > queue > \n"); > enqueue(&queue_postfix,ptoken2); > } // end "pop operators off stack > } // end "operators on stack" > push(ptop,ptoken); // push new operator onto stack > } // end "token is an operator" > > The second "while" is line 298. When I single-step with GDB, line 298 > repeats > indefinitely. If instead of single-stepping, I just let the program run, > the > printf is never executed. > > Here is the gdb output: > > 298 while ((op_precedences[stack_anchor->value.op_code] > > op_precedences[ptoken->value.op_code]) || ((op_precedences[stack_anchor- > >value.op_code] == op_precedences[ptoken->value.op_code]) && > (op_associativity[op_precedences[stack_anchor->value.op_code]] == LEFT))) { > (gdb) n > 298 while ((op_precedences[stack_anchor->value.op_code] > > op_precedences[ptoken->value.op_code]) || ((op_precedences[stack_anchor- > >value.op_code] == op_precedences[ptoken->value.op_code]) && > (op_associativity[op_precedences[stack_anchor->value.op_code]] == LEFT))) { > (gdb) n > 298 while ((op_precedences[stack_anchor->value.op_code] > > op_precedences[ptoken->value.op_code]) || ((op_precedences[stack_anchor- > >value.op_code] == op_precedences[ptoken->value.op_code]) && > (op_associativity[op_precedences[stack_anchor->value.op_code]] == LEFT))) { > (gdb) n > 298 while ((op_precedences[stack_anchor->value.op_code] > > op_precedences[ptoken->value.op_code]) || ((op_precedences[stack_anchor- > >value.op_code] == op_precedences[ptoken->value.op_code]) && > (op_associativity[op_precedences[stack_anchor->value.op_code]] == LEFT))) { > (gdb) n > 298 while ((op_precedences[stack_anchor->value.op_code] > > op_precedences[ptoken->value.op_code]) || ((op_precedences[stack_anchor- > >value.op_code] == op_precedences[ptoken->value.op_code]) && > (op_associativity[op_precedences[stack_anchor->value.op_code]] == LEFT))) { > (gdb) n > 298 while ((op_precedences[stack_anchor->value.op_code] > > op_precedences[ptoken->value.op_code]) || ((op_precedences[stack_anchor- > >value.op_code] == op_precedences[ptoken->value.op_code]) && > (op_associativity[op_precedences[stack_anchor->value.op_code]] == LEFT))) { > > > _______________________________________________ > Mid-Hudson Valley Linux Users Group http://mhvlug.org > http://mhvlug.org/cgi-bin/mailman/listinfo/mhvlug > > Upcoming Meetings (6pm - 8pm) Vassar College > Nov 7 - Typography: Physical Art to Digital Art > Dec 5 - Sysadmin Panel >
_______________________________________________ Mid-Hudson Valley Linux Users Group http://mhvlug.org http://mhvlug.org/cgi-bin/mailman/listinfo/mhvlug Upcoming Meetings (6pm - 8pm) Vassar College Nov 7 - Typography: Physical Art to Digital Art Dec 5 - Sysadmin Panel
