У меня есть эта функция для вставки узла в красно-черное дерево. Ключом порядка этого красно-черного дерева является строка 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;
}