Comunque continua a darmi SIGSEV (segmentation fault) quando chiamo la free,riposto il codice completo corretto:
codice:
int main(int agrc,char **agrv)
{
char *buffer;
lista *stack1,*stack2;
int *num1,*num2,i;
bool continua;
num1=(int*)malloc(sizeof(int));
num2=(int*)malloc(sizeof(int));
(*num1)=0;
(*num2)=0;
if(num1==NULL||num2==NULL)
MERROR
printf("Inserire la prima lista di strutture:\n");
do
{
insert(stack1,num1);
printf("Continuare ad inserire elementi?-->");
buffer=input();
continua=(atoi(buffer));
free(buffer);
}while(continua);
printf("Inserire la seconda lista di strutture:\n");
do
{
insert(stack2,num2);
printf("Continuare ad inserire elementi?-->");
buffer=input();
continua=(atoi(buffer));
free(buffer);
}while(continua);
printf("%d,%d\n",*num1,*num2); /* debug */
for(i=0;i<(*num1);i++)
{
free(stack1[i].nome);
free(stack1[i].cognome);
}
for(i=0;i<(*num2);i++)
{
free(stack2[i].nome);
free(stack2[i].cognome);
}
free(stack1);
free(stack2);
free(num1);
free(num2);
return 1;
}
codice:
char *input (void)
{
char *buffer;
char seeker;
int size=1;
buffer=(char*)malloc(sizeof(char));
if(buffer==NULL)
MERROR
while((seeker=getchar())!=10)
{
buffer[size-1]=seeker;
buffer=(char*)realloc(buffer,sizeof(char*));
if(buffer==NULL)
MERROR
}
buffer[size-1]='\0';
return buffer;
}
bool insert(lista *ptr,int *num)
{
(*num)++;
char *buffer;
if((*num)==1)
{
ptr=(lista*)malloc(sizeof(lista));
if(ptr==NULL)
MERROR
}
else
{
ptr=(lista*)realloc(ptr,(*num)*sizeof(lista));
if(ptr==NULL)
MERROR
}
printf("Inserisci nome:-->");
ptr[*num-1].nome=input();
printf("Inserisci cognome:-->");
ptr[*num-1].cognome=input();
printf("Inserisci eta:-->");
buffer=input();
ptr[*num-1].eta=atoi(buffer);
free(buffer);
return true;
}
Crasha esattamente alla riga 78:
codice:
free(stack1[i].nome);
Eppure se ho fatto tutto bene stack1 dovrebbe avere spazio in memoria,nella funzione di inserimento uso la malloc e se ritorna il puntatore a vuoto ho anche previsto un errore,non capisco perchè fa così.