PDA

Visualizza la versione completa : [C] problemi con malloc


slashino
12-02-2013, 12:30
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:

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:

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:

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?

Loading