我在使用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。
答案 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));
不应该将其分配给节点吗?