0

私は次のような機能を持っています

void printLinkedList(struct node *head) {

    printf("%d-->", head->data);

    while(head->ptr != NULL) {
        head = head->ptr;
        printf("%d-->", head->data);
    }
    printf("NULL\n");
}

次の方法で作成されたリンクされたリストの内容を印刷したいと思います。

for (int i = 0; i < 10; i++) {
    head->data = i+1;
    head->ptr = malloc(sizeof(struct node));
    head = head->ptr;
}

理想的には、これは私に次のようなものを与えるはずです:

1-->2-->3-->4-->...-->10-->NULL

ただし、すべてが正しければ、valgrind によってメモリ エラーが発生します。私が間違っていることを教えてください。

4

4 に答える 4

1

これをチェックして。

struct node *temp, *head= NULL, *last = NULL;
    for (int i = 0; i < 10; i++) {
        temp = malloc(sizeof(struct node));
        temp->data = i+1;
        temp->ptr = NULL;
        if (head == NULL)
          head = temp;
        if (last != NULL)
          last->ptr = temp;
        last = temp;
    }
printLinkedList(head);
于 2013-02-19T04:20:03.023 に答える
1

Tomsの答えを少し修正しました:

struct node *head = NULL, **temp = &head;
for (int i = 0; i < 10; i++) {
    *temp = malloc(sizeof(struct node));
    (*temp)->data = i+1;
    (*temp)->ptr = NULL;
    temp = &(*temp)->ptr;
}
printLinkedList(head);

temp が適切に割り当てられていないため、元のコードはセグ フォールトを生成します。

于 2013-02-19T04:46:09.350 に答える
0

これが改訂されたコードです - あなたの構築は不完全でした。

typedef struct _node {
    int data;
    struct _node *ptr;
} NODE, *PNODE;

PNODE head;

int main (int argc, char * argv[])
{

    head = (PNODE) malloc(sizeof(NODE));
    PNODE node = head;

    int i = 0;
    node->data = ++i;
    node->ptr = NULL;

    for ( ;i < 10; ) {
        PNODE tmp = (PNODE) malloc(sizeof(NODE));
        tmp->data = ++i;
        tmp->ptr = NULL;

        node->ptr = tmp;
        node =tmp;
    }

    printLinkedList(head);

    freeLinkedList(head);

    return 0;

}
于 2013-02-19T06:56:34.387 に答える
0

Linked list を構築せずに print 関数を呼び出すと、エラーが表示されるため、print 関数を次のように変更します。

void printLinkedList(struct node *head) 
{
    while(head != NULL) 
    {
        printf("%d-->", head->data);
        head = head->ptr;
    }
    printf("NULL\n");
 }
于 2013-02-19T05:05:26.330 に答える