Помимо исходного вопроса, этот код, даже в его правильных формах, не будет работать, просто из-за того, что tree::nodes
(извините за обозначение C ++) в качестве указателя на указатель не будет указывать на что-либо полезное правопосле того, как tree
как было неправильно.Таким образом, tree->nodes[0]
, который в случае обычных указателей по сути такой же, как *(tree->nodes)
, не может быть разыменован.В любом случае, это очень странная голова для дерева, но вы должны по крайней мере выделить один node*
для инициализации этого указателя на указатель:
tree *initTree() {
/* in C code (not C++), don't have to cast malloc's return pointer, it's implicitly converted from void* */
tree* atree = malloc(sizeof(struct tree)); /* different names for variables */
/* ... */
/* allocate space for numNodes node*, yet numNodes needs to be set to something beforehand */
atree->nodes = malloc(sizeof(struct node*) * atree->numNodes);
node* anode = malloc(sizeof(struct node));
atree->nodes[0] = anode;
return atree;
}