Gostaria de saber se esta certo o que eu estou fazendo.
char*str;for(i=0;i<size;i++){str=calloc(sizeof(char),100);//chamadaacallocn-vezesprintf("Digite o endereco da URL:");scanf("%s",str);string[i]=str;}free(str);//chamadaaofreeumavez
Se a idéia é ao final desse loop ter uma série de textos no array chamado string, então, o free no final está errado, pois ele irá apagar a última string do array e gerar um dangling pointer.
Se a idéia é ao final não ter nada na memória, então, o free deveria estar dentro do loop, substituindo a linha 06. Caso contrário, o for geraria uma série de dangling pointers.
MaiqueL
a idéia eh fazer o seguinte:
char*str;for(i=0;i<size;i++){str=calloc(sizeof(char),100);printf("Digite o endereco da URL:");scanf("%s",str);string[i]=str;}//usaovetorstringparachamaroutrasfuncoes....//depoisdeusarovetorstring//chamaofreeparalimparfree(str);
ViniGodoy
Ao final, você deve fazer free em todas as Strings dentro do vetor e no próprio vetor, caso ele também tenha sido criado por calloc/malloc:
A regra é clara. Criou com malloc/calloc, tem que liberar com free. No seu for, vc cria size vezes, terá que dar size frees.
MaiqueL
Soh que no meu caso eu tenho o seguinte:
intmain(){intsize;inti;printf("Digite a quantidade de URL para download:");scanf("%d",&size);char*string[size];char*str;for(i=0;i<size;i++){str=calloc(sizeof(char),100);printf("Digite o endereco da URL:");scanf("%s",str);string[i]=str;}//usaaStringparachamaroutrosprogramas//maisfuncoes....//agorachamaofreeparalimparfree(str);
eu vou ter que remontar a estrutura do meu programa?
MaiqueL
ViniGodoy:
Ao final, você deve fazer free em todas as Strings dentro do vetor e no próprio vetor, caso ele também tenha sido criado por calloc/malloc: