fiz o código abaixo de uma lista duplamente encadeada e acontece o seguinte problema no linux o programa roda perfeitamente. No windows o código dá erro na execução, descobri que o erro acontece quando vou inserir um terceiro elemento na lista. o que seria?? #include <stdio.h> #include <stdlib.h> typedef struct List_dupla{ int h; struct List_dupla* ant; struct List_dupla* pro; } *list; //----------------Construtoras list Nil(void){return NULL;} list Cons (int e, list I){ list aux = (list)malloc(sizeof(list)); aux->h = e; if (!I){ aux->ant=Nil(); aux->pro=Nil(); } else{ aux->ant=I->ant; aux->pro=I; I->ant=aux; } return aux; } //----------------acesssoras int head(list l){ return (int)l->h ;} list proximo (list l){ return l->pro; } list anterior (list l){ return l->ant; } int list_empty(list l){ return l==Nil() ;} // ---------- extras list insert_at(int pos, int x,list l){ list aux; int cont=1; aux=l; if(pos<=0) return Cons(x,l); while((cont<pos) && aux->pro!=Nil()){ aux = aux->pro; cont++; } aux->pro=Cons(x,aux->pro); return l; } list list_remove(int x, list l){ list aux=l; if (list_empty(l)||(x==head(l)&&(l->ant==l->pro))) // caso lista seja vazia return Nil(); // caso a lista tenha apenas 1 elemento; while ( head(aux) != x) { if (aux==Nil()) //não encontrou o elemento retorna a propria lista sem auteração; return l; aux = proximo(aux); } if (anterior(aux)) { // se existir um anterior a aux anterior(aux)->pro=aux->pro; } if (proximo(aux)){ // se existir um proximo a aux aux=proximo(aux); aux->ant=(anterior(aux))->ant; } if (x==head(l)) return proximo(l); return l; } void show(list l){ list aux=l; if (list_empty(l)) return ; do{ printf(" %d-",head(aux)); aux=proximo(aux); }while(aux!=Nil()); } int main(){ list c=Nil(); show©; c=Cons(60,c); c=Cons(50,c); c=Cons(40,c); c=Cons(30,c); c=Cons(20,c); c=Cons(10,c); show©; c=list_remove(10,c); printf("\nMostra de novo"); show©; c=insert_at(1,5,c); printf("\nMostra de novo"); show©; return 0; }