allocation memoire dans une fonction

allocation memoire dans une fonction - C++ - Programmation

Marsh Posté le 18-10-2013 à 10:57:29    

Bonjour lorsque je fais appel a cette fonction dans le main au final l'allocation ne se fait pas alors que si je mets lintereur dans du code directeur dans la fonction cela marche, ça avait marche pr un tableau1D... Qu'en pensez vous ? Une histoire de portée?

Code :
  1. void tableauallo2D (int* taille, int**  tableau2D){
  2. tableau2D=new int*[taille[0]];
  3. for(int i=0; i<taille[0];i++)
  4.     {
  5.         tableau2D[i]=new int[taille[1]];
  6.         }
  7. }


 

Reply

Marsh Posté le 18-10-2013 à 10:57:29   

Reply

Marsh Posté le 18-10-2013 à 11:18:42    

Bonjour !  
 
Deux remarques  :
 
* Que vaut taille[0] ?
* Vous modifiez un paramètre passé par valeur, ce qui est possible, mais la modification ne se fait qu'en local, le paramètre n'est pas modifié dans la fonction appelante. Donc,  l'allocation se fait, mais vous ne récupérez pas la valeur de tableau2D.
 
Sinon, pourquoi ne pas utiliser les std::vector ?
 
Bonne continuation !
 

Reply

Marsh Posté le 19-10-2013 à 12:50:31    

Comme déjà dit, tu modifie pas tableau2D en dehors de ta fonction.
 
Pour changer ça, tu peux faire ça :  
 

Code :
  1. void tableauallo2D (int* taille, int** & tableau2D)
  2. {
  3.     tableau2D=new int*[taille[0]];
  4.     for(int i=0; i<taille[0];i++)
  5.     {
  6.         tableau2D[i]=new int[taille[1]];
  7.     }
  8. }
  9. // ou :  
  10. void tableauallo2D (int* taille, int*** tableau2D)
  11. {
  12.     (*tableau2D)=new int*[taille[0]];
  13.     for(int i=0; i<taille[0];i++)
  14.     {
  15.         (*tableau2D)[i]=new int[taille[1]];
  16.     }
  17. }


 
La meilleur solution reste d'utiliser les std::vector :jap:.


---------------
Perhaps you don't deserve to breathe
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed