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 :

vie d'un pair < >


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut vie d'un pair < >
    Bonjour à tous, je me demandais si ce code là était correct? peut-on renvoyer une paire d'éléments comme ceci? La variable ne va t-elle pas mourir à la fin de la fonction (et donc le programma qui l'appelle va se planter lamentablement).
    Faut-il détruire la paire?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    
     
    template <typename T> std::pair<float, float> pointInterpolation(std::pair <int, int>& H, 
    
    std::vector< std::pair <int, int> >& depart, const cimg_library::CImg<T>& u, constfloat coeff_mul) {
    std::pair<
    float, float> H_v; //vecteur déplacement pour le point à remplir
    int a = depart.size(); /* Allocation dynamique de mémoire */ std::vector< std::pair <int, int> > pointschoisis; // calcul des points nécessaires pour l'interpolation nProchePoints(H, depart, NBPOINTSCHOISIS, pointschoisis); int x,y; // point de controle regardé float d; // distance entre le point courant et le point de controle float D=0; // distance totale float v_x,v_y; // vecteur déplacement du point de controle for (int i=0; i<NBPOINTSCHOISIS; i++ ) {
    x = (pointschoisis.begin() +i)->first; y = (pointschoisis.begin() +i)->second; v_x = u(x,y,0); v_y = u(x,y,1); d = dist(H, pointschoisis[i]); D+=1/d;
    // pour la normalisation H_v.first += v_x / d; H_v.second += v_y / d;
    } H_v.first = H_v.first/D; H_v.second = H_v.second/D; return H_v;
    }
    Merci à vous !

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est le principe du passage par valeur, la variable sera recopiée.

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Miles
    C'est le principe du passage par valeur, la variable sera recopiée.
    C'est mieux ou pas que de renvoyer un float* ?
    Vu que dans ce cas, il n'y a pas de copie....

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Sauf que pour un float*, tu as de l'allocation dynamique, alors avant que tu constates qu'effectivement c'est critique au niveau temps, utilise le passage par valeur.

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Mais là aussi il y a de l'allocation dynamique non?
    Sinon, ça ne marcherait pas.

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int *maFonction (....) {
         int H[5]={0,1,2,3,4};
         return(H);
    }
    plante car la variable est détruite avant même d'être renvoyée, non?

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Citation Envoyé par poukill
    Mais là aussi il y a de l'allocation dynamique non?
    Sinon, ça ne marcherait pas.

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int *maFonction (....) {
         int H[5]={0,1,2,3,4};
         return(H);
    }
    plante car la variable est détruite avant même d'être renvoyée, non?
    Pour que ça marche il faut allouer dynamiquement H.

  7. #7
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Mais là aussi il y a de l'allocation dynamique non?
    Non. Tu en vois où ?

    Exemple
    Dans ton exemple tu renvoies un pointeur sur le tableau, pas une copie de celui-ci (ce qui n'est d'ailleurs pas réalisable directement pour ce genre de tableaux).

  8. #8
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Il faut arrêter de voir la recopie comme un démon tout droit sorti de l'enfer ; au contraire c'est bien souvent la meilleure solution.

    Ca posera très rarement problème, encore plus pour une simple paire de flottants.

  9. #9
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Laurent Gomila
    Il faut arrêter de voir la recopie comme un démon tout droit sorti de l'enfer ; au contraire c'est bien souvent la meilleure solution.

    Ca posera très rarement problème, encore plus pour une simple paire de flottants.
    Oui, je comprend bien Laurent, je m'y mets!!! C'est d'ailleurs sur les conseils de Miles et autres que j'ai tout recodé dans cette optique!
    Preuve de bonne volonté non?

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

Discussions similaires

  1. VB.NET vs C# vs Java ou existe-t-il une vie après Visual Basic 6 ?
    Par B-Pascal dans le forum Débats sur le développement - Le Best Of
    Réponses: 32
    Dernier message: 05/07/2007, 12h46
  2. XSL nombre pair de pages
    Par Urthgard dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 25/06/2004, 10h45
  3. [CR8.5] Détail Paires/Impaires
    Par PAC76 dans le forum Formules
    Réponses: 6
    Dernier message: 28/05/2004, 11h08
  4. Calculer la parité paire d'un char
    Par James_ dans le forum C
    Réponses: 15
    Dernier message: 03/09/2003, 23h55
  5. Réponses: 4
    Dernier message: 30/06/2002, 20h23

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