-2

私はbsd-listを使って取り組んできました。そして、リストを作成して単純な整数要素を挿入する非常に単純なプログラムを作成しました。コードは次のとおりです。

#include<iostream>
#include<stdlib.h>
#include"bsd-list.h"

using namespace std;

struct foo {
    int a;
    LIST_ENTRY(foo) pointers; // pointers is the object of the structure generated by List Entry
} *temp, *var, *ptr;

LIST_HEAD(foo_list, foo);

int main(void)
{
    LIST_HEAD(foo_list, foo) head;
    LIST_INIT(&head);

    struct foo *item1 = new foo;
    struct foo *item2 = new foo;
    struct foo *item3 = new foo;
    item1->a = 60;
    item2->a = 120;
    item3->a = 240;
    LIST_INSERT_HEAD(&head, item1, pointers);
    LIST_INSERT_AFTER(item1, item2, pointers);
    LIST_INSERT_BEFORE(item2, item3, pointers);

    //Displaying inner details of list
    {
        cout<<"HEAD's Address : "<<head.lh_first<<endl;
        cout<<"Item 1 next value : "<<(item1)->pointers.le_next<<endl;
        cout<<"Item 1 prev value : "<<*(item1)->pointers.le_prev<<endl;
        cout<<"HEAD's Address : "<<head.lh_first<<endl;
        cout<<"Item 2 next value : "<<item2->pointers.le_next<<endl;
        cout<<"Item 2 prev value : "<<*(item1)->pointers.le_prev<<endl;
        cout<<"HEAD's Address : "<<head.lh_first<<endl;
        cout<<"Item 3 next value : "<<item3->pointers.le_next<<endl;
        cout<<"Item 3 prev value : "<<*(item3)->pointers.le_prev<<endl;
    }

    ptr = head.lh_first;
    for(;;ptr = ptr->pointers.le_next)
    {
        cout<<ptr->a<<endl;
    }

    return (0);
}

ステートメント*(item1)->pointers.le_prevを使用して、に含まれるアドレスの値を取得していますle_prev

**(item1)->pointers.le_prevただし、値60を取得するように何かしたいのですが、エラーが発生しています。逆参照を正しく使用するための適切な構文は何ですか?

4

2 に答える 2

0

NULL を確認する必要があります。

for(;;ptr = ptr->pointers.le_next)
{
    if(ptr==NULL) break;
    cout<<ptr->a<<endl;
}
于 2013-09-09T10:51:06.640 に答える