Aiuto, problema di Segmentazione

di il
2 risposte

Aiuto, problema di Segmentazione

Salve a tutti, sono un completo neofita del linguaggio C, mi è stata data questa consegna
"Realizzare una funzione: int separa(int vett[], int numE1); che nel vettore vett riceve numE1 numeri compresi tra 1 e 100. La funzione, senza utilizzare alcun altro vettore come supporto, deve cambiare di posizione gli elementi all'interno del vettore vett in modo tale che alla fine tutti gli elementi compresi tra 1 e 50 precedano tutti gli elementi compresi tra 51 e 100; inoltre le posizioni relative all’interno delle due parti, quella di numeri fino a 50 e quel
la di numeri maggiori di 50, devono essere mantenute come nell’originale vettore; la funzione deve restituire il numero di valori minori o uguali a 50. "

ora la funzione che ho realizzato è la seguente
int separa(int vett[], int numE1)
{
	int i, f, p, q;
	
	for(i=0; i<numE1; i++)
	{
		if (vett[i]<50)
		{ f++;
	}
		}
		
		for(i=0; i<f; i++)
		{
			if (vett[i]>50)
			{
				for(p = i+1; i<numE1; p++)
				{
					if(vett[p]<50)
					{
					q = vett[i];
					vett[i] = vett[p];
					vett[p] = q;
					break;
				}
					}
				}
			}
		}
(so che è proprio brutta), comunque collaudandola, viene compilata correttamente ma al momento dell'esecuzione del programma quando viene chiamata si genera un errore di segmentazione(core dump). Siccome sono davvero alle primissime armi e in parte autodidatta se qualcuno riuscisse a darmi una mano nel capire gli errori gliene sarei grato!

2 Risposte

  • Re: Aiuto, problema di Segmentazione

    Scusa a che serve quella break alla fine?
    e poi manca il return alla chiusura della routine
  • Re: Aiuto, problema di Segmentazione

    Comunque sia, la segmentazione è causata da un indice (i oppure p) che oltrepassa i limiti del vettore. Controlla i valori che assumono tali indici e chiediti il perché.
Devi accedere o registrarti per scrivere nel forum
2 risposte