There is some confusion about accessing of tree node information. Incorrect accessing leads to hard-to-trace memory errors (typically, segmentation violation). Below is a hint: Assume node is declared as a pointer to a NodeType NodeType *node; De-referencing the pointer (if not NULL) *node gives an object of type NodeType. As NodeType is a vector (of size 26), its elements can be accessed as follows: (*node)[index] 0<=index<=25 The elements of NodeType are structs. To access struct fields, "." notation is used: (*node)[index].word_endings (*node)[index].is_word_end The following is WRONG (though not detected by C compilers due to the "equivalence" between arrays and pointers to elements -- char string[] is type equivalent to char *string): node[index]->word_endings node[index]->is_word_end Remember, p->f is a shorthand notation for (*p).f De-reference (follow) pointer p. p MUST be a pointer to a struct. In this case, *p is a struct and its field f can be accessed. This means node[index]->word_endings is exactly the same as (*(node[index])).word_endings which assumes there is an array of NodeType objects ! It is NOT the same as (*node)[index].word_endings