Мой код или netbeans изменяет значения адреса памяти моего дерева самостоятельно (C)

Я строю двоичное дерево поиска, которое записывает мух.

поэтому структура построена так

struct SVolo{
       float orariopart;
       float orarioarr;
       char pospartenza[MAX];
       char posarrivo[MAX];
       char code[COD];
       int nposti;
       bool *mappa_posti;

   };

struct SNode{
   TVolo info;
   struct SNode *left;
   struct SNode *right;

};

typedef struct SVolo TVolo;
typedef struct SNode TNode;
typedef TNode *TBST;

Поэтому я сделал функцию вставки мух в дерево

TBST bst_insert(TBST tree, TVolo info){
    if(tree==NULL){
        tree = Create_Node(info);
        return tree;
    }
    if( info_greater(info, tree->info) ){
        tree->right = bst_insert(tree->right, info);
        return tree;
    }else{
        tree->left = bst_insert(tree->left, info);
        return tree;
    }
}

В котором я даю информацию о мухах, и дерево организовано по коду, если код (который является буквенно-цифровым) больше, он вставляется в правое поддерево, иначе он идет влево.

Я отладил, и кажется, что вставка в порядке

Когда я использую функцию для печати:

void bst_print(TBST tree){
    if(tree == NULL){
        return;
        }
        bst_print(tree->right);
        info_print(tree->info);
        bst_print(tree->left);
}

Он идет в первом bst_print(tree->right); и это проверяет, является ли это нулем, и это. Затем уходит тот «цикл», в котором мы передали дерево -> прямо как поддерево. Затем он печатает информацию о корне. в конце, когда он должен выполнить bst_print(tree->left) он выдает ошибку ядра дампа - ошибку сегментации.

Я использовал отладку и заметил, что адрес левого поддерева не нулевой. Даже в Create_Node он инициализируется как NULL .

он имеет следующее значение 0x213, но я никогда не касался этого значения, оно меняется само по себе. Конечно, он дает мне ошибки, он просит напечатать что-то, что не сохраняется в памяти в функции info_print . Дело в том, что я знаю, где ошибка, но почему это происходит? И как мне это исправить?

Вот как создаются узлы:

TNode *Create_Node(TVolo info){
    TNode *New_Node=(TNode*)malloc(sizeof(TVolo));
    New_Node->info=info;
    New_Node->left=NULL;
    New_Node->right=NULL;
    return New_Node;
}

Всего 1 ответ


В функции Create_Node есть ошибка, из-за которой я выделил sizeof(TVolo) который не является тем размером, который вы должны выделить. После исправления этого с помощью malloc(sizeof(TNode) проблема была решена.


Есть идеи?

10000