0

リンクされたリストでwhileループを使用しようとすると問題が発生しました。と という 2 つの連結リストがtempありgraphます。私はタスクを実行するために while ループを使用していますwhile(temp != NULL)。各ループで先に進むために、 を割り当てていtemp = temp->linkます。ただし、このコードはコンパイルされません。再帰関数が解決策になる可能性があることは理解していますが、関数は実際にははるかに複雑であるため、再帰関数はそれほど良い考えではないと思います。ちなみに、graphはすでにリンクされたリストを作成しています。前もって感謝します!

PS 宿題の一部です。

temp = graph->link;
while(temp!=NULL){
    if(stack->link == NULL){
        stack->link = (node_pointer)malloc(sizeof(graph));
        stack->link->weight = temp->weight;
        stack->link->vertex = temp->vertex;
    }
    temp = temp->link; //Here is the problem.
}

編集:

stack と graph はどちらも連結リストの配列です。

typedef struct node *node_pointer;

struct node{
    int vertex;
    int weight;
    int visited;
    struct node *link;
};
node_pointer graph[50];
node_pointer stack[50];
node_pointer temp;
4

1 に答える 1

1

0xC00000005 はコンパイル時エラーではありません。このエラーは通常、アクセスが許可されていないメモリ ロケーションにアクセスしたときに発生しますNULL。実行時エラーです。tempが NULL ではなく、malloc適切に編集されているかどうかを確認してください。それは...ですか?他のすべての変数も確認してください。デバッガを使用して実行しますvalgrind。言語とデバッグ技術を正しく学ぶのに役立ちます。特に CompileTime と RuntimeErrors ;-)。

また、新しいノードを作成するときとlink同様に明示的に作成します。NULL通常、ポインター変数には、初期化されていない JUNK 値が含まれます。JUNKメモリの場所に設定linkしてアクセスしていないと仮定しています。NULLガベージ イン ガベージ アウト。IF TEMP(WHICH IS SET TO LINK) IS NOT EQUAL TO NULLLINK がnullではなくジャンクである場合、ロジックは失敗します。

于 2012-12-11T13:05:48.987 に答える