Buonasera, ho riscontrato un problema con il seguente codice:
codice:
/* Prendere in input vettore di 27 numeri e dare come risultato 1 se la
* sequenza di numeri è perfetta, 0 se non lo è */
#include <stdio.h>
#include <stdlib.h>
int isPerfect (int *seq,int isperfect) {
int i=0;
for (i=0;i<(sizeof(seq)/sizeof(int));i++) {
i++;
if (seq[i]==seq[seq[i]+2]) isperfect=1;
else isperfect=0;
}
return isperfect;
}
int main()
{
int i=0,*seq=NULL,n,isperfect=0;
printf("Inserisci 0 per terminare la sequenza\n");
do {
seq=(int *)realloc(seq,((i+1)*sizeof(int)));
//Acquisisco
printf("\nInserisci il %d numero: ",i+1);
scanf("%d",&n);
//Inserisco valore nell'array
i++;
seq[i]=n;
} while(n!=0);
//Chiamo la funzione isPerfect
isPerfect(seq,isperfect);
if (isperfect==1) printf("La sequenza di numeri è perfetta");
else printf("La sequenza di numeri non è perfetta");
free(seq);
return 0;
}
Praticamente la terza volta che immetto il numero (nel ciclo do-while del main) mi dice "realloc(): invalid next size: indirizzo_esadecimale".
Tralasciando la correttezza del'algoritmo in sé vorrei sapere il motivo per cui mi da errore sulla realloc. Ho provato ad usare valgrind (opero in ambiente Linux, su Ubuntu) per vedere se centrava il memory leak, seppur ero certo del fatto che non potesse essere un problema del genere, ed infatti non è quello il problema. Grazie in anticipo