2012-11-24 12 views
1

J'essaie de passer un pointeur sur un tableau dans une fonction et de le renvoyer. Le problème est qu'après une initialisation correcte, la fonction renvoie un pointeur NULL. Quelqu'un peut-il me dire, quel est le problème avec ma logique?Comment passer un pointeur sur un tableau dans une fonction, le modifier et revenir correctement?

Voici ma fonction, où tableau est déclaré:

void main() 
{ 
    int errCode; 
    float *pol1, *pol2; 
    pol1 = pol2 = NULL; 
    errCode = inputPol("A", pol1); 
    if (errCode != 0) 
    { 
     return; 
    } 

    // using pol1 array 

    c = getchar(); 
} 

Et voici la fonction avec l'initialisation:

int inputPol(char* c, float *pol) 
{ 
    pol= (float *) calloc(13, sizeof(float)); 
    while(TRUE) 
    { 
     // While smth happens 
     pol[i] = 42; 
     i++; 
    }; 
} 
+4

Vous devez augmenter le niveau d'avertissement de votre compilateur (ou faire attention à vos avertissements) afin de ne pas écrire des fonctions non-vides sans les instructions 'return'. : -/ – HostileFork

+2

Est le code que vous affichez le code complet que vous exécutez? Je vois et boucle infinie dans la fonction inputPol et vous ne retournez pas le code d'erreur. –

+0

p.s. vous n'avez pas besoin de lancer le résultat de 'calloc' en C – newacct

Répondre

5

Vous devez passer l'adresse de pol1, alors principal sait où la mémoire allouée est:

void main() 
{ 
    int errCode; 
    float *pol1, *pol2; 
    pol1 = pol2 = NULL; 
    errCode = inputPol("A", &pol1); 
    if (errCode != 0) 
    { 
     return; 
    } 

    // using pol1 array 

    c = getchar(); 
} 

int inputPol(char* c, float **pol) 
{ 
    *pol= (float *) calloc(13, sizeof(float)); 
    while(TRUE) 
    { 
     // While smth happens 
     (*pol)[i] = 42; 
     i++; 
    }; 
} 
Questions connexes