Errore di segmentazione in C

di il
1 risposte

Errore di segmentazione in C

Buongiorno, sto cercando di creare un programma che caricato un vettore, mi restituisca il vettore ordinato e senza la copia degli elementi.
Ad esempio
inserisco 2,4,1,1,4,2,3,3,4 e mi restituisca 1,2,3,4;

Ho scritto questo codice:

#include <stdio.h>

#define MAXDIM 19

int elemv(void);
void carica(int vet[], int n);
int comp(int vet[], int n);
int ordina(int vet[], int n);
void del_copy(int vet[], int n);
void stampa(int vet[], int n, int max);

int main(void)
{
	int n, vet[MAXDIM], max;
	
	n = elemv();
	carica(vet, n);
	max = comp(vet, n);
	stampa(vet, n, max);
	
	return 0;
}


int elemv(void)
{
	int n;
	
	printf("\nQuanti elementi vuoi inserire nel vettore?\n");
	scanf("%d", &n);
	
	while(n<1 || n>MAXDIM)
	{
		printf("Non puoi inserire %d, inserisci un numero compreso tra 1 e %d (compresi)\n", n, MAXDIM);
		scanf("%d", &n);
	}

	return n;
}


void carica(int vet[], int n)
{
	int i;
	
	for(i=0; i<n; i++)
	{
		printf("Inserisci il %d elmento ---> ", i+1);
		scanf("%d", &vet[i]);
	}
}


int comp(int vet[], int n)
{
	int max;
	
	max = ordina(vet, n);
	del_copy(vet, n);
	
	return max;
}


int ordina(int vet[], int n)
{
	int i, j, save, max;

	for(i=0; i<n-1; i++)
	{
		for(j=i+1; j<n; j++)
		{
			if(vet[i]>vet[j])
			{
			save = vet[i];
			vet[i] = vet[j];
			vet[j] = save;
			}
		}
	}
	
	max=vet[n-1];
	
	return max;
}

void del_copy(int vet[], int n)
{
	int i, j, save, max, cont=0;
	
	for(i=0; i<n-1; i++)
	{
		for(j=i+1; j<n; j++)
		{
			if(j+1<n)
			{
				if(vet[i]==vet[j])
				{
					if(vet[i]!=vet[j+1])
					{
						vet[j]=vet[j+1];
						save=vet[j+1];
					}
					else
					{
						cont = cont+1;
					}
				}
				else
					break;
			}	
		}
		for(j=i+1; j<cont+1; j++)
		{
			vet[j]=save;	
		}
	}
}


void stampa(int vet[], int n, int max)
{
	int i;
	
	for(i=0; i<n; i++)
	{
		if(vet[i]!=max)
		{
			printf("| %d ", vet[i]);
		}
		else
		{
			printf("| %d |\n", vet[i]);
			break;
		}
	}
}
Questo codice funziona se inserisco pochi elementi nel vettore, ma appena inserisco una decina di elementi mi da errore di segmentazione, vorrei capire cosa significa questo tipo di errore e da cosa è dovuto.

Io credo che l'errore sia nella funzione del_copy

void del_copy(int vet[], int n)
{
	int i, j, save, max, cont=0;
	
	for(i=0; i<n-1; i++)
	{
		for(j=i+1; j<n; j++)
		{
			if(j+1<n)
			{
				if(vet[i]==vet[j])
				{
					if(vet[i]!=vet[j+1])
					{
						vet[j]=vet[j+1];
						save=vet[j+1];
					}
					else
					{
						cont = cont+1;
					}
				}
				else
					break;
			}	
		}
		for(j=i+1; j<cont+1; j++)
		{
			vet[j]=save;	
		}
	}
}
Grazie in anticipo.

1 Risposte

  • Re: Errore di segmentazione in C

    Intanto ti suggerisco per le prove di inserire in maniera fissa una sequenza che generi l'errore, ovvero senza dover ogni volta iniziare con l'inserimento manuale.
    Dopodichè devi individuare dove sta l'errore e per questo ti consiglio di inserire delle printf nei vari punti, es, "inizia ciclo", "analizzo elemento %d", i ...
Devi accedere o registrarti per scrivere nel forum
1 risposte