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

Reply via email to