RicardoLopes Posted April 16, 2015 at 11:40 AM Report Share #581366 Posted April 16, 2015 at 11:40 AM Boas, estou a tentar passar todas as strings que tenho numa estrutura de dados (arvore AVL) para um array de strings, e estou a tentar fazer com que a inserção das strings seja de forma ordenada, mas esta me a dar segmentation fault, podem me ver e ajudarem me a compreender onde estou a falhar sff. int length(char **s){ int i=0; while(s[i]!=NULL) i++; return i; } char** swap(char **s,int a, int b){ char *aux=s[a]; s[a]=s[b]; s[b]=aux; return s; } char** shiftr(char **s,int i){ for(;i<length(s);i++){ s=swap(s,i,i+1); } return s; } char** extractclient(Catcliente c,char **s){ int meio,min=0,max=length(s)-1; if (c!=NULL){ if (s==NULL){ s=(char**)malloc(sizeof(char*)); s[0]=strdup(c->string); s[1]=NULL; s=extractclient(c->e,s); s=extractclient(c->d,s); } else{ while((max-min!=1)){ meio=((length(s)-1)+min)/2; if(strcmp(s[meio],c->string)<0){ min=meio; } else{ max=meio; } } s=(char**)realloc(s,(length(s))*sizeof(char*)); s=shiftr(s,max); s[max]=strdup(c->string); s[length(s)]=NULL; s=extractclient(c->e,s); s=extractclient(c->d,s); } } return s; } Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 16, 2015 at 11:57 AM Report Share #581368 Posted April 16, 2015 at 11:57 AM quantoa memória está a ser reservada aqui ? s=(char**)malloc(sizeof(char*)); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
RicardoLopes Posted April 16, 2015 at 12:01 PM Author Report Share #581369 Posted April 16, 2015 at 12:01 PM (edited) quantoa memória está a ser reservada aqui ? s=(char**)malloc(sizeof(char*)); Apenas um apontador para um caracter, mas eu estou a usar a função strdup que devolve um apontador de caracter, essa função por si propria não está já a reservar espaço na memoria para a string, penso eu Edited April 16, 2015 at 12:02 PM by rdolxd Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 16, 2015 at 12:04 PM Report Share #581371 Posted April 16, 2015 at 12:04 PM Apenas um apontador para um caracter agora que todos sabemos que só estás a reserver um ponteiro ... s[0]=strdup(c->string); // 1s[1]=NULL; // 2 ???[/Code] IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
RicardoLopes Posted April 16, 2015 at 12:22 PM Author Report Share #581372 Posted April 16, 2015 at 12:22 PM (edited) agora que todos sabemos que só estás a reserver um ponteiro ... s[0]=strdup(c->string); // 1s[1]=NULL; // 2 ???[/Code] Estava a tentar arranjar alguma maneira de tentar saber o comprimento do array, foi um bocado forma estupida agora que penso nisso e desesperada pois estava a tentar fazer isto o mais depressa possivel. Lembrei me de experimentar agora a divisão de sizeof(s)/sizeof(char*) para saber o tamanho do array (visto que estou sempre a realocar mais 1) e retirei os NULLs. Ja não me dá segmentation fault, mas o programa tbm chega a parte que tem de chamar a função e está ali empancado, não haverá uma maneira mais eficiente de fazer isto? Edit: burrice minha, já funciona, obrigado pela ajuda Edited April 16, 2015 at 01:47 PM by rdolxd Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now