Prezados,
Estou desenvolvendo um jogo de cartas em C. Utilizo duas variáveis globais do tipo ponteiro para Lista (TAD).
Lista* M_l; //Montante de compra
Lista* G_l; //Pilha de descarte
Inicializo a lista M_l com todas as cartas do jogo.
A lista G_l permanece nula até que uma carta é jogada sobre a mesa (Pilha de descarte).
A fim de distribuir uma carta de G_l para M_l no início do jogo, criei a seguinte função que transfere n cartas do tipo Lista *.
void transferirCartas(Lista *listDest, Lista *listOrig, int n);
Basicamente, uso duas rotinas do TAD lista para inserir e remover cartas da lista:
carta temp = lst_ObterCarta(listOrig);
listDest = lst_Insere(listDest, temp);
listOrig = lst_Remove(listOrig);
Ao usar esse procedimento percebi que quando altero *listDest e *listOrig dentro da rotina, as variáveis globais M_l e G_l não sofrem alterações, e portanto, M_l por exemplo, continua a ficar nula (Sem cartas inseridas),
Porém, ao usar a rotina ou apenas invocar as mesmas rotinas do TAD lista abaixo usando como argumento as variáveis globais de fato : G_l e M_l - consigo realizar a transferência de cartas normalmente. (Isso não ocorre quando outra variável local as recebe como na rotina acima ou na própria main quando faço apontamento direto e realizo inserção e remoção).
carta temp = lst_ObterCarta(G_l);
M_l = lst_Insere(M_l, temp);
G_l = lst_Remove(G_l);
Alguém sabe o que pode estar ocorrendo? (Pensei que pode ser algo relacionado com heap, stacks e retornos das chamadas de função).
A implementação do TAD Lista está neste Link>> github <<
Grato pela ajuda!