Go Down

Topic: retourner un tableau  (Read 325 times) previous topic - next topic

lgabed420

Bonjour, j'aimerai retourner un tableau dans une fonction, donc je sais qu'une fonction ne le permets pas,d'aprés quelques ptites recherches, il me reste soit l'utilisation de structure soit l'allocation dynamique.
j'ai commencé par utiliser malloc mais ca ne marche pas comme je le souhaite, j'ai fait une erreur quelque part , je vous mets le code  :

Code: [Select]

int Verif_params_cycle( int * number_cycles , size_t taille_tab ){

 
    number_cycles = malloc(taille_tab * sizeof(int));


      switch(floor_number)
      {
        case 1: if(cycle_state == true ) {

                    Serial.print("un cycle est dejà en cours");
                 
               }
               else{
                  Serial.print("Lancement de cycle :   ");
                  Verif_params_gen();
                  Verif_pH();
                 number_cycles[0]++; // incremennter le nb de cycle dans l'etage 1.
                  Serial.print("\t");
                  Serial.print("number_cycles[0]++");
                  Serial.print(number_cycles[0]);
               }
     
          break;
        case 2:
                if(cycle_state == true ) {
                 
                    Serial.print("un cycle est dejà en cours");
         
              }
                else{
                 Verif_params_gen();
                 Verif_pH();
                number_cycles[1]++;
               }
     
          break;   
    }


         return number_cycles;
   
 
}




oor_number est une var globale pas de probleme
dans la fonction loop je fais :

Code: [Select]

int nbr_cycles[2] = {0,0};
Verif_params_cycle( nbr_cycles[0] , 2 );



et j'obtiens :



number_cycles[0]++6 
number_cycles[0]++7
.
.
.

Merci d'avance !


hbachetti

#1
Jul 19, 2019, 06:19 pm Last Edit: Jul 19, 2019, 06:23 pm by hbachetti
Ta fonction Verif_params_cycle admet en paramètre l'adresse d'un tableau d'entiers.

Or dans ton appel, tu lui passes la première cas du tableau, donc un entier :

Code: [Select]
Verif_params_cycle( nbr_cycles[0] , 2 );
// ceci serait plus correct
Verif_params_cycle( nbr_cycles , 2 );


Ensuite tu écrases number_cycles par un appel à malloc().
Pour quoi faire étant donné que cette variable contient déjà l'adresse d'un tableau valide, passé par l'appelant.

Ensuite tu retournes number_cycles, qui est l'adresse d'un tableau, alors que ta fonction est censée retourner un int !

Elle devrait être déclarée comme ceci :

Code: [Select]
int *Verif_params_cycle( int * number_cycles , size_t taille_tab )

Ensuite, pourquoi retourner number_cycles alors que la fonction appelante loop() connaît déjà ce tableau, puisqu'elle passe nbr_cycles en paramètre.

Si j'avais un conseil à te donner : utilise des variables globales.

Remarque : le compilateur avr ne te signale pas toutes les erreurs. Si tu compilais avec le compilateur ESP8266, tu serais moins à la fête.
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

lgabed420

Merci hbachetti  je l'ai mi en variable globale est c a m'a simplifié la tache !

lesept

#3
Jul 22, 2019, 11:16 am Last Edit: Jul 22, 2019, 11:24 am by lesept
Retourner un tableau, c'est pas dur :

A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

bidouilleelec

Retourner un tableau, c'est pas dur :
Ah! Ca y est : la chaleur a frappé !
lesept (bonjour) : il faut boire !

Cordialement,
bidouilleelec

lesept

#5
Jul 22, 2019, 11:26 am Last Edit: Jul 22, 2019, 11:27 am by lesept
Ou sortir la tête par la fenêtre :



Attention à ne pas trop boire, sinon :

A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

bidouilleelec

#6
Jul 22, 2019, 12:16 pm Last Edit: Jul 22, 2019, 12:38 pm by bidouilleelec Reason: texte mal interprété
Ou sortir la tête par la fenêtre :

Attention à ne pas trop boire, sinon :

Avec quoi on peut créer ces effets faire cela sous windows ?

Cordialement,
bidouilleelec

lesept

A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

lgabed420


Go Up