ciao, ho riscontrato un problema in un esercizio dove bisogna scrivere una funzione in c che deve cercare un numero all'interno di un vettore e restituire tutte le sue occorrenze, ma quando chiamo la funzione nel main l'esecuzione si blocca e non riesco a capire dove sbaglio. La funzione che ho scritto è questa:
codice:
int *cerca (int *vettore,int elem,int n)
{
int i, *vett=(int*)malloc(n*sizeof(int)),j=0;/*dichiaro le variabili locali*/
if (vett==NULL)
return NULL;
for(i=0;i<n;i++)
vett[i]=-1;
for (i=j=0;i<n;i++)/*faccio un ciclo che mi cerca l'elemento*/
if (vettore[i]==elem) vett[j++]=i;
return vett;
}
vi posto anche il main:
codice:
int main()
{
int *vettore,n,i, elem, *vett;/*dichiaro le variabili locali al main e il puntatore*/
/*chiedo e alloco il numero di elementi del vettore*/
printf("Quanti numeri si vogliono nel vettore? ");
scanf("%d",&n);
vettore=(int*)malloc(n*sizeof(int));
if (vettore==NULL){/*controllo che l'allocazione sia andata a buon fine*/
printf("Errore nell\'allocazione");
exit(EXIT_FAILURE);
}
/*genero casualmente il vettore*/
printf("\n\nVettore generato casualmente:");
srand(time(NULL));
for(i=0;i<n;i++)
{
vettore[i]=(rand()%100);
printf("%d ",vettore[i]);
}
/*chiedo che elemento si deve cercare all'interno del vettore*/
printf("\n\nChe numero si desidera cercare?");
scanf("%d",&elem);
/*cerco l'elemento nel vettore non ordinato*/
printf("\n\nLa posizione dell\'elemento inserito è: ");
if((vett=cerca(vettore,elem,n)==NULL))
{
printf("Errore nell\'allocazione");
return 1;
}
for(i=0;i<n && vett[i]!=-1;i++)
printf(" %d",vett[i]+1);
/*ordino il vettore attraverso la funzione "ordina" e lo stampo*/
printf("\n\nVettore ordinato: ");
ordina(vettore,n);
for(i=0;i<n;i++)
printf("%d ",vettore[i]);
/*cerco l'elemento nel vettore ordinato attraverso la funzione "cerca_ordinato" e stampo la sua posizione*/
printf("\nLa posizione del valore inserito è: %d",cerca_ordinato(vettore,elem,n));
/*dealloco il vettore*/
free(vettore);
return 0;
}