Problema con struct passaggio a funzione tramite puntatore

di il
2 risposte

Problema con struct passaggio a funzione tramite puntatore

Salve a tutti,

sto scrivendo un programma in C++ e mi sono perso un po' nei meandri dei puntatori tra la dichiarazione delle variabili di una struttura ed i passaggi alle funzioni...cerco di spiegarmi meglio con parti semplificate del codice per focalizzare il problema...

Ho dichiarato due strutture nell'header:
typedef struct ind_st  /* an individual */
{
    int index;
    double *parameters;
} ind;

typedef struct pop_st  /* a population */
{
    int size;
    ind **ind_array;
} pop;
Che vengono inizializzate da un'apposita funzione (per brevità inserisco solo l'inizializzazione della prima):
ind* create_ind(int Npar)
/* Allocates memory for one individual. */
{
    ind *p_ind;
    
    assert(Npar >= 0);
    
    p_ind = (ind*) chk_malloc(sizeof(ind));

    p_ind->index = NULL;
    p_ind->parameters = (double*) chk_malloc(Npar * sizeof(double));
    for (int i = 0; i < Npar; i++)
    	p_ind->parameters[i] = NULL;

    return (p_ind);
}
All'interno del programma vorrei richiamare una funzione del tipo: (Npar è una variabile globale):
ind* function(ind *ind_1, ind *ind_2)
{
	ind *ind_new = create_ind(Npar);

        .... operazioni su ind_1 e ind_2 per assegnare i corretti valori alle variabili di ind_new

	return ind_new;
}
e la richiamo in questo modo:

pop_new->ind_array[i+1] =  function(pop_old->ind_array[j], pop_new->ind_array[k]);
Ora, all'interno della funzione tutto funziona bene, nel senso che le variabili di "ind_new" hanno i valori corretti appena prima del "return", però queste non vengono passate a "pop_new->ind_array[i+1]"

Dove sta l'errore?

2 Risposte

  • Re: Problema con struct passaggio a funzione tramite puntatore

    Dov'è inizializzato ind_array[] ?
    Nel listato non si vede.
  • Re: Problema con struct passaggio a funzione tramite puntatore

    Si perché per brevità ho copiato qua solo l'inizializzazione della prima struttura, ecco l'altra:
    pop* create_pop(int size, int dim)
    /* Allocates memory for a population. */
    {
        pop *pp;
        
        assert(dim >= 0);
        assert(size >= 0);
        
        pp = (pop*) chk_malloc(sizeof(pop));
        pp->size = size;
        pp->ind_array = (ind**) chk_malloc(maxsize * sizeof(ind*));
        
        for (int i = 0; i < size; i++)
    	pp->ind_array[i] = NULL;
        
        return (pp);
    }
Devi accedere o registrarti per scrivere nel forum
2 risposte