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.

→ Ссылка