現在のプログラムには大きな問題があります。ループ内で、このループ内で別の関数呼び出しを行うと、2 つの関数が永久ループになります。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()` 関数が基本的に行うことは次のとおりです。
配列から 2 つの構造体を取得し、そのメンバーの一部をデクリメント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
これもリンクされているように実装されており、その前と次のメンバーを指すprev
andがあります。next