IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

probleme d allocation avec un tableau de BYTE


Sujet :

C++

  1. #1
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 141
    Points : 128
    Points
    128
    Par défaut probleme d allocation avec un tableau de BYTE
    Voila je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void Recup(byte * id){
    	//id = (BYTE *) malloc(20 * sizeof(BYTE));
    	id = new BYTE[20];
     
    	for(int z =0;z<20;z++){
    		id[z]= h.idDispositivo[z];//h.idDispositivo est un tableau de byte de 20
    	}
     
       //Pourquoi ici ca ne ressort pas les meme valeur ???
    	printf("dans recup2 id dispositivo -->%d<-- \n", h.idDispositivo);
    	printf("dans recup2 id dispositivo id-->%d<-- \n",id);	
    }
    et ceci ne marche pas du tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    byte * lid = NULL; 
    	Recup(lid);
    	printf("\nfboucle : -->");
       //ici exception de levé
    	for(int q=0;q<20;q++){
    		printf("%c",lid[q]);
    	}
    	printf("dans cle ajoute id dispositivo -->%d<-- \n",lid);
    	delete lid;
    Je ne vois pas pourquoi mon allocation est mal faite, si quelqu un a une idée je suis preneur...

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ce que tu affiches avec tes 2 printf, ce sont les adresses de tes tableaux. Donc normal que les résultats soient différents.

    Pour ton second problème, tu passes ton pointeur par copie ce qui explique que celui passé à la fonction ne sera pas modifié. Il faut utiliser un passage par référence, ou passer un pointeur sur ton pointeur.

    Mais bon, tout ça c'est du C, en C++ on fait bien mieux.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void Recup(std::vector<BYTE>& id)
    {
       id.assign(h.idDispositivo, h.idDispositivo + 20);
    }
     
    std::vector<BYTE> lid;
    Recup(lid);
     
    std::cout << std::endl << "fboucle : -->";
     
    for(std::vector<BYTE>::const_iterator i = lid.begin(); i != lid.end(); ++i)
       std::cout << *i;
    Si tu manipules des chaînes de caractère, pense à std::string.

    http://c.developpez.com/faq/cpp/?page=STL#STL_vector
    http://c.developpez.com/faq/cpp/?page=strings

  3. #3
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 141
    Points : 128
    Points
    128
    Par défaut
    Merci beaucoup, effectivement j avais le nez dans mon erreur et je voyais pas ... Sinon utiliser les vector et les string ca serait bien mais j utilise une librairie creer par d' autre et je peux pas toucher au type !

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Sinon utiliser les vector et les string ca serait bien mais j utilise une librairie creer par d' autre et je peux pas toucher au type !
    Effectivement c'est toujours ennuyeux.
    Au pire on peut toujours mitouiller un peu, en se rappelant que :

    - Un vecteur peut être envoyé à une fonction demandant un pointeur, avec &v[0].
    - Un vecteur peut être construit à partir d'un tableau classique, en utilisant le constructeur prenant une paire d'itérateurs, la fonciton membre assign ou std::copy.
    - La conversion string -> const char* est possible via la fonction membre c_str().
    - La conversion char* -> string est également possible via le constructeur de string.

  5. #5
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 141
    Points : 128
    Points
    128
    Par défaut
    Effectivement ! mais tout ca m as l air un petit peu fastidieux et je prefere garder les meme type si les autres reprennent ce que je fais !

    Sinon j ai un autre petit probleme de pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Recup(BYTE ** id){
    	id = &new BYTE[20];
    	for(int z =0;z<20;z++){
          //ici exception
    		*id[z]= h.idDispositivo[z];
    	}
    }
     
    avec 
    BYTE * lid = NULL; 
    	Recup(&lid);
    Desolé je suis tres mauvais avec les pointeurs ... (Vive le java )

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par e1lauren
    Desolé je suis tres mauvais avec les pointeurs ... (Vive le java )
    C'est bien pour ça que l'on te conseille d'utiliser les vecteurs et de programmer en C++.

    Si id est un pointeur de pointeur qui passe dans un paramètre, c'est soit parce que tu manipules une structure à deux dimensions, soit par ce que le paramètre est sortant (et que tu programmes comme en C).
    Ici tu es dans le deuxième cas. Ce que tu veux changer, c'est la valeur du pointeur, que tu passes à ta fonction.

    Le C, c'est comme le java, (en fait, c'est le contraire), les paramètres sont toujours pris par valeur (ceux qui affriment le contraire, mentent).
    En C et en Java (j'exclue donc les références du C++) quelque soit le type d'un paramètre formel, affecter quoique ce soit à ce paramètre formel ne modifira pas le paramètre réel que tu as passé à ta fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // T: type quelconque pointeur ou non
    void func (T p_formel) {
        p_formel = T(xxxx);
    }
    ...
    T p_reel(zzzz);
    T const souvenir = p_reel;
    func(p_reel);
    assert(p_reel == souvenir);
    assert(p_reel != T(xxxx));
    Revois le chapitre de ton cours C sur les swap et autres paramètres sortants.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [F90]probleme d'allocation d'un tableau
    Par Flow_75 dans le forum Fortran
    Réponses: 5
    Dernier message: 16/11/2010, 15h13
  2. [CSS&HTML]Problem de hauteur avec un tableau
    Par pierrot10 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 27/09/2006, 19h21
  3. Probleme d'allocation avec un malloc
    Par theshark85 dans le forum C
    Réponses: 11
    Dernier message: 25/04/2006, 17h30
  4. Réponses: 3
    Dernier message: 19/04/2006, 13h28
  5. Probleme avec un tableau
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 14
    Dernier message: 09/12/2005, 01h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo