クラス用に C でプログラムを作成しており、ペア プログラミングを行っています。どうすればプログラムがクラッシュしないのか不思議です。私のパートナーはこのコード ブロックを以下に追加しました。私は valgrind を実行してテストし、メモリ リークがあるかどうかを確認しました。とにかく、このコードがどのように機能するのか疑問に思っていました。なぜなら、私が curr を解放すると、次に実行されるのは curr = curr->link だからです。では、メモリから取り出された場合、どのようにして curr がリンクを持つことができるのでしょうか? このようなものはうまくいかないと思いました。
これが私のパートナーが書いたものです:
for(node curr = list->head; curr != NULL; curr = curr->link ){
if (!dflag) printf("%s\n",curr->words);
else printf("[%p]\n",curr);
free(curr->words);
free(curr);
}
^ this ^ がクラッシュした場合に備えて、私が考えていたことは次のとおりです。
for (node curr = list->head; curr != NULL; ) {
if (!dflag) printf("%s\n",curr->words);
else printf("[%p]\n",curr);
node prev = curr;
curr = curr->link;
free(prev);
}
また、ノードの作成方法は次のとおりです。
typedef struct node *node;
struct node {
cstring words;
node link;
};