I have this code:
#include "stdlib.h" #include "stdio.h" typedef struct lista TLista; struct lista{ char dado; TLista* prox; }lista; TLista* insere(TLista* l, char dado){ TLista* aux; TLista* anterior; if(l == NULL){ l = (TLista*) malloc(sizeof(TLista)); l->dado = dado; l->prox = NULL; }else{ aux = l; while(aux != NULL){ anterior = aux; aux = aux->prox; } aux = (TLista*) malloc(sizeof(TLista)); anterior->prox = aux; aux->dado = dado; aux->prox = NULL; } return l; } void imprime(TLista* l){ if(l == NULL){ printf("A lista esta vazia"); }else{ while(l != NULL){ printf("%c", l->dado); l = l->prox; } } void concatena(TLista* lista1, TLista* lista2){ TLista* aux = lista1; if(!lista1){ lista1 = lista2; printf("\nInside function: "); imprime(lista1); }else{ while(aux->prox != NULL){ aux = aux->prox; } aux->prox = lista2; } } int main() { TLista* lista1 = NULL; TLista* lista2 = NULL; printf("\n"); lista1 = insere(lista1, 't'); lista1 = insere(lista1, 'e'); lista1 = insere(lista1, 's'); lista1 = insere(lista1, 't'); lista1 = insere(lista1, 'e'); imprime(lista1); printf("\n\n\n\n"); lista2 = insere(lista2, 'x'); lista2 = insere(lista2, 'u'); lista2 = insere(lista2, 'l'); lista2 = insere(lista2, 'a'); lista2 = insere(lista2, 'm'); lista2 = insere(lista2, 'b'); lista2 = insere(lista2, 's'); concatena(lista1,lista2); printf("\nOutside function: "); imprime(lista1); printf("\n\n"); return 0; } The functions names were written in Portuguese. So, the function concatena should merge two lists and in fact it is doing it when lista1 is not NULL, but when I comment out these lines:
lista1 = insere(lista1, 't'); lista1 = insere(lista1, 'e'); lista1 = insere(lista1, 's'); lista1 = insere(lista1, 't'); lista1 = insere(lista1, 'e'); imprime(lista1); the function concatena should receive the first list as NULL and the second as xulambs. According to it, the lista1 should receive lista2's head address, but when the function ends it execution lista1 is empty.
I debugged printing the values of lista1 just after receive lista2's head address and it works well, but when got to the main function, lista1 still NULL.
Can anyone help me to figure out whats going on? thanks
A few translations:
- lista = list
- dado = data
- prox = next
- imprime = print
- insere = add
- concatena = merge
#include <...>. 2) Do not cast the return value ofmalloc. 3) Code in English. Really. 4) You have an unused global variable namedlistathere. Get rid of it. 5) Use whitespace (for example aroundif). Improves readability. 6) Use return values.concatenashould return the new list. 7) When you write a function thatmallocs, write one thatfrees, too.