現在のプログラムには大きな問題があります。ループ内で、このループ内で別の関数呼び出しを行うと、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() andb()` 関数が基本的に行うことは次のとおりです。
配列から 2 つの構造体を取得し、そのメンバーの一部をデクリメントsizeします。このような構造は、プログラムの終了時にのみ解放されません (まだ)。1printf()
コードのこの部分を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()- は、私の文脈では と同等です。
topstruct footype-スタック から最後に処理されたポイント。
size - 現在スタックにある要素の数。
struct footypeこれもリンクされているように実装されており、その前と次のメンバーを指すprevandがあります。next