From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

Problema passaggio puntatore ad una funzione

Risolto!
Vai alla soluzione

Ciao a tutti,

Ho bisogno di fare una funzione alla quale passo un puntatore come parametro, e al suo interno crea un array di dati ( es double ), la quale dimensione viene determinata all'interno della funzione stessa.

Al termine della funzione mi serve che questo puntatore punti all'array creato.

Allego un esempio dove passo il puntatore ptr1,e come return assegno il puntatore ptr2 ( sono dichiarati allo stesso modo).

Al termine della funzione ptr1 rimane NULL , mentre ptr2 viene correttamente riportato.

Purtroppo a me serve come come parametro e non come return.

Di seguito un esempio.

 

double *calcola (double *ptr)
{
    ptr = calloc (10, sizeof(double));
    return ptr;
}

int main (int argc, char *argv[])
{
    
    double *ptr1=NULL;
    double *ptr2=NULL;
    
    ptr2 =calcola(ptr1);
    
    return 0;
}

 

 

0 Kudos
Messaggio 1 di 5
5.430Visualizzazioni
Soluzione
Accettato da autore argomento Luca1975

Se devi ricevere indietro l'indirizzo dell'array devi passare alla funzione il puntatore al puntatore:

 

int calcola (double **ptr)
{
    int    error = 0;

    nullChk (*ptr = calloc (10, sizeof(double)));

Error:
    return error;
}


int main (int argc, char *argv[])
{
    double	*ptr = NULL;

    r = calcola (&ptr);

    return 0;
}

 



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
Messaggio 2 di 5
5.417Visualizzazioni

Grazie 1000 funziona.

0 Kudos
Messaggio 3 di 5
5.411Visualizzazioni

Ricordati anche di gestire nel chiamante un eventuale errore di allocazione, che la funzione restituisce come valore di ritorno. Questo ti permette di evitare successivi errori nell'accesso alla memoria in caso di problemi.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
Messaggio 4 di 5
5.405Visualizzazioni

Ok grazie

0 Kudos
Messaggio 5 di 5
5.357Visualizzazioni