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 :

Problème passage d'arguments


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Par défaut Problème passage d'arguments
    Bonjour à tous, j'ai un problème de passage d'arguments.

    J'ai une fonction CALCUL qui ne renvoie rien et qui prend 3 Vecteurs en entrée dont un qui stocke le résultat d'un calcul qu'on va appeler RES.

    J'ai une autre fonction BOUCLE qui appelle cette fonction car j'ai besoin de RES à chaque tour boucle dans cette fonction.
    Pour limiter les dégâts,je me suis contenté d'écrire en dur 2 tours de boucle et j'ai un problème c'est qu'au 2ème tour de boucle,j'accède en lecture et en écriture à une zone mémoire non allouée/initialisée.

    J'ai essayé plein de choses,dont le passage par argument de RES puis par pointeur (ce qui est quasi pareil) puis par double pointeur pour pouvoir y accéder sans me faire avoir par le fait que RES n'est que local à CALCUL et j'ai déclaré un Vecteur en argument de BOUCLE pour le réceptionner,ait essayé d'en allouer un dynamiquement...

    NB : c'est valgrind qui me signale les fuites mémoires,le programme compile et je pense même qu'il s'execute sauf que si je fais 200 ou 500 tours de boucle...

    Bref,je galère et ce serait génial si quelqu'un pouvait me dépanner d'une idée pour pouvoir récupérer le petit RES à la caisse centrale ou autre.

    Bon après-midi

  2. #2
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    Citation Envoyé par krigeur Voir le message
    Bref,je galère et ce serait génial si quelqu'un pouvait me dépanner d'une idée pour pouvoir récupérer le petit RES à la caisse centrale ou autre.
    Ici on ne pratique pas l'art divintoire !!!
    Sans code source, ça va être super compliquer de t'aider à corriger ton erreur.

  3. #3
    Candidat au Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Par défaut Code mais bibli privée non dispo sur le web
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    void anglecommande(DVector &xcom,DVector &xfinal,DVector **alphaprim){
     
    DVector *Pd = new DVector(2);
    DVector *Vd = new DVector(2);
     
    (*Pd)[0] = xfinal[0] - xcom[0];
    (*Pd)[1] = xfinal[1] - xcom[1];
     
    std::cout<<"Pd dans anglecom\n"<<Pd<<std::endl;
     
    (*Vd)[0] = xcom[2];
    (*Vd)[1] = xcom[3];
     
    std::cout<<"Vd dans anglecom\n"<<Vd<<std::endl;
     
    double normPdcube = ( Pd->l2Norm() ) * ( Pd->l2Norm() ) * (Pd->l2Norm() );
    std::cout<<"normPd dans anglecom\n"<<Pd<<std::endl;
     
     
     
    //(r*tmpM)[0];
     
    DMatrix tmpVd(*Vd);
     
    **alphaprim = ((*Pd)*tmpVd)[0];
    std::cout<<"PdxVd dans anglecom\n"<<Vd<<std::endl;
    **alphaprim *= ( (*Pd)[0] * (*Vd)[1] - (*Pd)[1] * (*Vd)[0] )*(-5/normPdcube);
    //alphaprim = alphaprim *(-5/normPdcube);
    std::cout<<"Reste Calcul alphaprim dans anglecom\n"<<Vd<<std::endl;
     
    //std::cout<<"alphaprim\n"<<alphaprim<<std::endl;
     
    DELETE_AND_NULLIFY(Pd);
    DELETE_AND_NULLIFY(Vd);
     
    }
     
     
    //Calculer une commande ça marche aussi,c'est pour en recalculer une autre que ça //craint,j'ai pu le constater en commentant à partir du 2ème calcul dans anglecommande
     
    //Cette fonction marche bien,je l'ai testée indépendamment et elle est nickel,je mets son //prototype quand même vu que je l'utilise
     
    //void Simulrk4(double tinit,double pas,int nbpas,DVector &init,DMatrix &solution);
     
    void simulationaveccommande(double tinit,double pas,int nbpas,int nbcom,DVector &xinit,DVector &xfinal,DMatrix &solution,DVector &commandes){
    //DVector minisoltmp(0.,0.,0.,0.);
    DVector *xtmp = new DVector(size);
    DVector *comtmp = new DVector(1);
    //double comtmp;
     
    std::cout<<"xtmp dans simulaveccom\n"<<xtmp<<std::endl;
     
    *xtmp = (0.,0.,0.,0.);
    DMatrix *soltmp = new DMatrix(nbpas + 1,size);
     
    std::cout<<"soltmp dans simulaveccom\n"<<soltmp<<std::endl;
     
    //double **comtmp = new double*;
     
    std::cout<<"**comtmp apres declaration\n"<<comtmp<<std::endl;
     
    Simulrk4(tinit,pas,nbpas,xinit,*soltmp);
     
    anglecommande(xinit,xfinal,&comtmp);
     
    for(int i = 0;i <= nbpas;i++){
    for(int j = 0;j < size;j++){
    (solution.getPtr())[nbpas + i][j] = (soltmp->getPtr())[i][j];
    }//for i
    }//for j
     
    (commandes.getPtr())[1] = (*comtmp)[0];
     
    *xtmp = solution.extractLin(nbpas + nbpas-1);
     
    DELETE_AND_NULLIFY(comtmp);
     
    DELETE_AND_NULLIFY(xtmp);
    DELETE_AND_NULLIFY(soltmp);
    }

Discussions similaires

  1. problème avec la fonction Find et un passage en argument
    Par paiva44 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/12/2009, 18h56
  2. problème en passage d'arguments
    Par soumti84 dans le forum Général Java
    Réponses: 9
    Dernier message: 29/03/2009, 17h53
  3. Problème passage arguments !
    Par Ani[MAL] dans le forum Débuter
    Réponses: 5
    Dernier message: 10/12/2008, 11h04
  4. [Configuration] Problème de passage d'argument
    Par bugs58 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 15/12/2006, 11h20
  5. [Registre] Problème de passage d'arguments
    Par nicolas.pied dans le forum C++
    Réponses: 5
    Dernier message: 12/11/2006, 14h11

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