exception has accurred. Trace\breakpoints trap
При попадании функции (delet_tree) на узел со значением 1 происходит ошибка
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef struct Tree
{
int value;
struct Tree *left;
struct Tree *right;
}Tree;
void delete_tree(Tree *leaf)
{
if (leaf->left != NULL)
{
leaf = leaf->left;
return delete_tree(leaf);
}
else
{
free(leaf);
}
if (leaf->right != NULL)
{
leaf = leaf->right;
return delete_tree(leaf);
}
else
{
free(leaf); // вылезает ошибка
}
}
int main()
{
Tree leaf_1 = {1 , NULL, NULL};
Tree leaf_2 = {2 , NULL, NULL};
Tree leaf_3 = {3 , NULL, NULL};
Tree node_1_2 = {4, &leaf_1, &leaf_2};
Tree root = {5, &node_1_2, &leaf_3};
delete_tree(&root);
return 0;
}
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
Нельзя удалять память, не выделенную перед этим с помощью malloc.
У вас же попытка удалить объект в стеке, что приводить к UB.