Сравнение двух строк с помощью strcmp () дает EXC_BAD_ACCESS - PullRequest
0 голосов
/ 09 мая 2018

У меня есть эта функция для вставки узла в красно-черное дерево. Ключом порядка этого красно-черного дерева является строка id_prod, сравниваемая функцией strcmp. Когда я пытаюсь вставить узел в эту структуру, Xcode выдает мне это предупреждение EXC_BAD_ACCESS

это функция:

void insert_id(node *sent, node *new_node)
{
    if (sent->parent == NULL)
    {
        new_node->left = new_node->right = sent;
        sent->parent = new_node;
        new_node->color_node = black;
    }
    else
    {
        node *temp = malloc(sizeof(struct node));

        temp = sent->left;

        while (temp != sent)
        {
            if(strcmp(temp->id_prod, new_node->id_prod) < 0)
            {
                temp = temp->left;
            }
            else
            {
                temp = temp->right;
            }
        }
        if (strcmp(new_node->id_prod, temp->id_prod) < 0)
        {
            temp->left = new_node;
            new_node->parent = temp;
        }
        else
        {
            temp->right = new_node;
            new_node->parent = temp;
        }
        new_node->left = new_node->right = sent;
        new_node->color_node = black;
        setup_tree(sent, new_node);
    }
    return;
}

Строки находятся в файле. Это функция, которая читает и присваивает данные из файла на узел структуры:

структура:

typedef struct node
{
color   color_node;
char    id_prod[5],         
        name[20],           
        id_piece[5];        
struct  node    *left,
                *right,
                *parent;
} node;

Функция:

node* get_node_file(FILE *in)
{
node *new_node = (node*) malloc(sizeof(node));

fscanf(in, FORMAT_IN,   new_node->id_prod,
                        new_node->name,
                        new_node->id_piece);


new_node->left = NULL;
new_node->right = NULL;
new_node->parent = NULL;
new_node->color_node = black;
return new_node;
}

а это главное:

#define STORE "Magazzino.txt"

int main()
{

FILE    *input;
node *sent = malloc(sizeof(struct node));
sent->color_node = black;
sent->left = sent->right = sent->parent = NULL;


input = fopen(STORE, "r");

insert_id(sent, get_node_file(input));
insert_id(sent, get_node_file(input));
insert_id(sent, get_node_file(input));



return 0;
}
...