1

この一連のポインターの内容にアクセスする C のコードで問題が発生しています。

私はこれらの構造体を持っています:

typedef struct {
    unsigned int hash;
    char string[10]; 
    void *memory;
} thing;

typedef struct {
    int num; 
    thing *thing;
} node;


typedef struct {
    int size;
    thing* things;
    node* nodes;
} t_system;

Ok。今、私は次のようにすべてを初期化します:

thing* things = NULL;
things = calloc(10, sizeof(thing));

node* nodes = NULL;
nodes = calloc(10, sizeof(node));

t_system* theSystem = NULL;
theSystem = calloc(1, sizeof(t_system));

    theSystem->things = things;
    theSystem->nodes = nodes;

そして今、私はこれを設定したい:

theSystem->nodes[2].thing = &theSystem->things[1];

その行の後、デバッグしてブレークポイントを設定すると、システム ノードは 0x0 を指します

どこが間違っていますか?


if (theSystem->nodes[2].thing == NULL) {
    theSystem->nodes[2].thing = &theSystem->things[1]; //this is executed
}
if (theSystem->nodes[2].thing == NULL) {
    //this is not executed...
}

私がすることができます:

theSystem->nodes[2].thing->hash = 123;

また、デバッグでは、ハッシュとモノの正しい値が表示されますが、ノードの値は表示されません。0x0 を指します。

4

2 に答える 2

2

あなたが書いた

node* nodes = NULL;
tree = calloc(10, sizeof(node));

書いておくべきだった

node* nodes = NULL;
nodes = calloc(10, sizeof(node));
于 2012-07-17T06:39:13.623 に答える
1

次の行でノードを NULL に初期化します。

node* nodes = NULL; 

次に、この行の System->nodes にノードを割り当てます。

theSystem->nodes = nodes; 

その間のノードの値を決して変更しないため、システム->ノードも NULL になります。

次の行は正しいですか。

tree = calloc(10, sizeof(node));  

代わりにこれをノードに割り当てるべきではありませんか?

于 2012-07-17T06:40:07.613 に答える