指向struct的指针,指针指向结构的指针数组。 C中的动态内存

时间:2012-07-17 06:36:15

标签: c arrays memory pointers dynamic

我在使用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;

确定。现在我初始化这样的一切:

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;

调试显示hash和thing的正确值,但不是节点。它指向0x0。

2 个答案:

答案 0 :(得分:2)

你写了

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

你应该写

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

答案 1 :(得分:1)

在此行上将节点初始化为NULL:

node* nodes = NULL; 

然后将节点分配给此行上的系统 - >节点:

theSystem->nodes = nodes; 

由于您永远不会更改其间的节点值,因此系统 - >节点也将为NULL。

您确定以下行是正确的:

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

不应该将其分配给节点吗?