Вы не выделяете достаточно места в BTCreate()
. sizeof(BTNode)
- это размер указателя, а не размер treenode
структуры. Должно быть:
BTNode root = malloc(sizeof(*root));
или
BTNode root = malloc(sizeof(TREENODE));
Общее правило состоит в том, что аргумент типа для sizeof()
в вызове malloc()
должен , а не совпадать с типом переменной, которую вы назначаете. Это должен быть тип, на который указывает указатель, т. Е. Он должен иметь на один *
меньше, чем тип переменной, или вы можете использовать *variable
для ссылки на значение, на которое он указывает.
Также часто бывает плохой идеей указывать указатели. См. Это хорошая идея, чтобы печатать указатели? . Имя, которое вы использовали, BTNode
, является хорошим примером путаницы, которую оно вызывает; Вы называете это «узлом», но на самом деле это не узел, это указатель на узел. Вы должны использовать имя типа BTNodePtr
, но какой смысл в этом, когда вы можете просто сказать TREENODE *
, чтобы быть совершенно ясным?