Salve a tutti, mentre testavo un programma per calcolare l'intersezione tra due insiemi ho riscontrato il seguente problema:
nella funzione per calcolare l'intersezione creo ins_int, dove inserirò gli elementi in comune tra i due insiemi; se provo a inserire e stampare elementi dell'insieme dentro la funzione intersezione ci riesco, ma dal momento in cui restituisco alla main l'insieme, e provo a stamparlo, a tempo d'esecuzione mi dà un errore di segmentazione, come se non avessi mai inizializzato l'insieme. Penso quindi che il problema sia su come restituisco l'insieme, anche se non ne sono sicuro . Sapete aiutarmi?
Grazie mille in anticipo.
ps: ovviamente negli insiemi ins1 e ins2 sono stati inseriti e validati gli elementi in un altro punto della main.
La funzione appartiene a una libreria quindi ho scritto il codice su diversi fil, per questo vi metto solo le parti interessate.
STRUTTURA PER RAPPRESENTARE L'INSIEME:
typedef struct insieme
{
double *arr; /*array che andrà a contenere gli elementi dell'insieme*/
int dim; /*variabile per il numero di elementi dell'insieme*/
int ind; /*variabile indice per muoversi all'interno dell'array*/
} insieme_t;
FUNZIONE INTERSEZIONE:
insieme_t * intersezione ( insieme_t ins1, /*variabile per rappresentare il primo insieme*/
insieme_t ins2) /*variabile per rappresentare il secondo insieme*/
{
insieme_t *ins_int; /*variabile per estituire alla main l'insieme intersezione*/
if(ins1 . ind == 0)
ins_int =(insieme_t*) calloc (1, sizeof(insieme_t));
if( (ins1 . ind) < (ins1 . dim) )
{
for (ins2 . ind = 0; (ins2 . ind) < (ins2 . dim); ins2 . ind ++)
if((ins1 . arr[ins1 . ind]) == (ins2 . arr[ins2 . ind]))
{
if((ins_int -> dim) == 0)
{
ins_int -> dim = 1;
ins_int -> ind = 0;
ins_int -> arr= (double *) calloc( 1, sizeof(double));
ins_int -> arr[ins_int -> ind] = ins1 . arr[ins1 . ind];
}
else
{
ins_int -> dim ++;
ins_int -> ind ++;
ins_int -> arr = (double *) realloc( ins_int -> arr, ins_int -> dim * sizeof(double));
ins_int -> arr[ins_int -> ind] = ins1 . arr[ins1 . ind];
}
}
ins1 . ind ++;
ins_int = intersezione (ins1, ins2);
}
ins1 . ind = 0;
ins2 . ind = 0;
return(ins_int);
}
PEZZO DELLA FUNZIONE CHIAMANTE(MAIN):
insieme_t *ins_int; /*dichiarazione dell'insieme intersezione*/
ins_int = intersezione(ins1<, ins2); /*chiamata alla funz. intersezione*/
printf("L'insieme intersezione ha il seguente numero di elementi:\n"); /*stampa a schermo del numero di elementi*/
printf("%d", ins_int -> dim);