2011-01-31 17 views
2

二重リンクされたリストに問題があります。別のノードのノードからデータを取得できません。このように:ノード - >前 - >前。しかし、node-> prevは問題ありません。 誰もがその理由を知っていますか?Cのリンクされたリスト

コード:グーグルを使用して

/*Add value - right side*/ 
void addListRight(doubleList *node, int value) 
     { 
     doubleList *newNode; 
     newNode = createList(); 
     newNode->val = value; 
     newNode->right = node->right; 
     newNode->left = node; 
     node->right->left = newNode; /*<-Error start here - 'segmentation error' or something like this*/ 
     node->right = newNode; 
     } 

、私が見つけたいくつかの男がこのように()に置くこと:(ノード - >右) - >右。私はそれを試しましたが、結果は同じです。 「 - >」が、私は英語でそれを知らない私はのためのproprerワードを言いたい*

GCC/Ubuntuの10.10を使用して

。私の悪い..申し訳ありません!この質問のタグについても同じです!

+1

'場合は、フィールド'中(NULLポインタ以外)のものがあることを確信している:

参考

は、ここでは例としてリンクリストの実装です右? –

+0

Uhn ..私は確信していません..もっと正確には、私はそれが正しいと思った:Pしかし助けてくれてありがとう!私は皆さんのすべての正しい答えの線の間の答えを理解できなかったダンスです! コード全体は次のとおりです。http://www.shuryon.com.br/C-CPP/list.c 機能的なものは次のとおりです。http://www.shuryon.com.br/C-CPP/list-ok1 .c 問題が解決しました。 – Shuryon

答えて

2

このようなポインタを使用する前にNULLをチェックする必要があります。リストの先頭には前置詞はありません。

+0

ええ、私は(上記のコードではなくint)でした。 ここ:www.shuryon.com.br/C-CPP/list.c 確認できますか? – Shuryon

+0

@Shuryon:そのURLのあなたのコードはチェックしません。 'addNodeRight()'では、if(node-> right){node-> right-> left = newnode; } '。 – caf

+0

ありがとうございました!これともう1つあれば、私は実際にそれを見ることができます! http://www.shuryon.com.br/C-CPP/list-ok1.c ここに「ifs」のないバージョンが1つあります:http://www.shuryon.com.br/C-CPP/list -ok2.c – Shuryon

1

セグメント違反エラーが発生しているようです。つまり、無効なメモリにアクセスしようとしています。私の推測では、node->rightを割り当てていないか、それはNULLです。すべてのポインタが有効で、適切に割り当てられていることを確認してください。 node`は、リストの先頭がある

#include <stdio.h> 
#include <stdlib.h> 

typedef struct doubleList doubleList; 
struct doubleList 
{ 
    int value; 
    doubleList *left, *right; 
}; 

doubleList *addListRight(doubleList *node, int value) 
{ 
    doubleList *newNode; 
    newNode = malloc(sizeof(doubleList)); 
    if(newNode == NULL) 
    { 
     return NULL; 
    } 
    newNode->value = value; 
    newNode->left = NULL; 
    newNode->right = NULL; 
    if(node != NULL) 
    { 
     newNode->left = node; 
     node->right = newNode; 
    } 
    return newNode; 
} 

int main(int argc, char **argv) 
{ 
    doubleList *list = addListRight(NULL, 5); 
    addListRight(list, 2); 

    // Outputs: 5, 2 
    printf("%d, %d", list->value, list->right->value); 

    return 0; 
} 
+0

私はチェックしました(あなたのやり方ではありません) 男o_Oそれは変です!私は何が、本当に何ですか? ここにコード全体を掲載します:www.shuryon.com.br/C-CPP/list.c – Shuryon

+0

ありがとう!問題が解決しました! – Shuryon

関連する問題