我目前的程序有一个大问题。在循环内部,如果我在此循环中执行另一个函数调用,则有两个函数,我得到一个永远循环!甚至printf("bah");
给出一个永远的循环。
这可以正常执行。
//size = 10 (example)
while(size > 0) {
a(); // decrement by 2
b(); // decrement by 2
}
但
//size = 10 (example)
while(size > 0) {
a(); // decrement by 2
b(); // decrement by 2
putchar(' ');
}
给一个永远的循环。唯一不同的是putchar()
通话。
很难假设一些事情,但是对正在发生的事情有一些想法?
a() and
b()` 函数的作用基本上是:
从一个数组中获取两个结构,递减一个size
及其1
一些printf()
成员。此类结构仅在程序结束时才被释放(尚未)。
我将这部分代码发布到 tro 以了解(可能)发生了什么。这部分代码中的所有代码都非常大(发布在这里供我们阅读)。
编辑:
这是一个最小的a()
实现b()
:
void a(void) {
foo_t* f = top;
while(f->y == STATE_X) {
get(&a); get(&b); /* it's equivalent to pop() in a linked list. size is size=size-1 in each get call() */
printf("%d,%d\n",a->x,ab->x);
f = f->next;
}
top = f;
}
void a(void) {
foo_t* f = top;
while(f->y == STATE_Y) {
get(&a); get(&b); /* it's equivalent to pop() in a linked list. size is size=size-1 in each get call() */
printf("%d,%d\n",a->x,ab->x);
f = f->next;
}
top = f;
}
get()
pop()
-在我的上下文中是我的等价物。
top
- 指向最后struct footype
从堆栈处理的。
size
- 当前在堆栈上的元素计数。
struct footype
也被实现为与 this 关联,有一个prev
andnext
指向它的前一个和下一个成员。