Salve a tutti.
Ho fatto una funzione che mi stampi una struttura albero per livelli, dall'ultimo al primo, da sinistra a destra. La funzione è la seguente:
codice:
void stampa_per_livello(t_tree tree)
{
    int dim_albero=n_albero(tree);
    int i =0;
    printf("La dimensione dell'albero e'  %d :\n",dim);
    if(dim!=0)
    {
        t_stack stack=stack_create(dim);
        stack_push(&stack,*tree);
        while(!stack_is_full(stack))
        {
            t_node temp=stack.item[i];
            if(temp.right!=NULL && temp.left!=NULL)
            {
                stack_push(&stack,*(temp.right));
                stack_push(&stack,*(temp.left));
            }
            if(temp.right==NULL && temp.left!=NULL)
                stack_push(&stack,*(temp.left));
            if(temp.right!=NULL && temp.left==NULL)
                stack_push(&stack,*(temp.right));
            i++;
        }
        stampa_stack(stack);
    }
    
}
Con la struttura t_stack dichiarata nel seguente modo:
codice:
struct s_stack
{
    int n;
    t_node * item;
    int capacity;
};
Se inserisco dei nodi nell'albero, chiamo la funzione stampa_per_livello, e poi provo a inserire un ulteriore nodo nell'albero, la malloc nella funzione node_create fallisce:
codice:
 t_node* node_create(t_info info)
{
    printf("STO PER CREARE IL NODO\n");
    t_node* new_node=(t_node*)malloc(sizeof(t_node));
    if(new_node==NULL)
    {
        printf("Problemi con new_node\n");
        assert(new_node!=NULL);
    }
    
    new_node->info=info;
    new_node->right=NULL;new_node->left=NULL;
    printf("STO PER FARE RETURN\n");
    return new_node;
    
}
( in particolare entra nel primo if e poi viene attivata assert ).
Questa cosa non accade se non chiamo prima la funzione stampa_per_livello che in qualche modo deve creare problemi ( in che modo? ).
Esempio:
Inserisco tre nodi: 5, 6, 3 ( l'info dell'albero è un intero ). Poi chiamo la funzione stampa_per_livello e l'output è: 3-6-5. Provo a inserire 2 ed entra nell'if di cui prima...qualche consiglio?