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 :

Passer un pointeur de tableau de float en paramètre


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Points : 65
    Points
    65
    Par défaut Passer un pointeur de tableau de float en paramètre


    J'essaye d'appeler une fonction d'une classe en lui passant en paramètre un pointeur sur un tableau de flottants, mais il me ressort toujours une erreur de débordement de pile... Je dois faire une erreur, mais je ne m'en sort pas, si vous aviez une idée:



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class TAcquisition
    {
    ...
      bool MaFonction(float *tableau);
    ...
    };
     
    bool TAcquisition::MaFonction(float *tableau)
    {
      //On fais l'acquisition dans le tableau, et on répond true si c'est OK
    ...
    }
    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
    -->Constructeur:
    {
    ...
      //Acquisition déclarée dans le .h : TAcquisition *Acquisition;
      Acquisition = new TAcquisition(this);
    ...
    }
     
    -->Destructeur
    {
    ...
      delete Acquisition
    ...
    }
     
    -->Fonction appelée lors du click sur un bouton
    {
      float *TmpBuffer;
    ...
      Acquisition->MaFonction(TmpBuffer);
    ...
    }
    En mettant des points d'arrets, je remarque que ça plante juste lors de l'appel de la fonction MaFonction... Je suis sous BC++ 6.

    Quelqu'un a-t-il une idée?

    Merci :-)

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    1. C'est le constructeur de quoi ?
    2. Sans le code de MaFonction, difficile de dire ce qui plante dedans...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    1) Ha oui pardon, j'ai pas précisé...

    En fait, il s'agit du constructeur, et du destructeur de la Form où se situe le bouton qui vient appeler MaFonction.

    2) Ben, c'est pas dans MaFonction où il y a quelque chose qui plante. J'ai essayer en pas à pas, c'est juste lors de l'appel, c'est pour ça que je suis bloqué , mais pour informations, il s'agit de ça:

    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
    bool TAcquisition::MaFonction(float *tableau)
    {
      //Test d'entrée dans la fct
        Application->MessageBox("Acquisition","Acquisition",MB_OK);
     
      try
      {
        tableau = new float[2];
        tableau[0] = ainf0(2,0,0x8000,0,520,0);
        tableau[1] = ainf1(2,0,0x8000,0,520,0);
        return true;
      }
      catch(...)
      {
        return false;
      }
    }
    et donc, jamais la messagebox ne s'affiche, d'ailleur, mon point d'arret dessus ne s'arrete jamais

    Si vous avez des idées, ça doit être une erreur tellement grosse que je bataille dessus depuis moulte maintenant

    Merci

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour commencer, essaie sans la messagebox : Pour des raisons de boucle de messages, ça a tendance à nuire au débogage plusqu'autre chose...
    PS: Tu es conscient qu'il est inutile de passer un float* par valeur en paramètre si c'est pour l'allouer dans la fonction, hein ?
    Soit tu le déclares dans la fonction, soit tu veux que la fonction le modifie et tu dois donc passer le pointeur par valeur...
    PPS: C'est du Borland ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    Pour commencer, essaie sans la messagebox : Pour des raisons de boucle de messages, ça a tendance à nuire au débogage plusqu'autre chose...
    Ha bon, merci de l'info, c'est vrai que j'en abusais pour essayer de débugger... mais finalement, en pas a pas, c'est plus pratique

    PS: Tu es conscient qu'il est inutile de passer un float* par valeur en paramètre si c'est pour l'allouer dans la fonction, hein ?
    Soit tu le déclares dans la fonction, soit tu veux que la fonction le modifie et tu dois donc passer le pointeur par valeur...
    Ben, en fait, c'et pas le but: au départ, pour la petite histoire, je crée un tableau de flottant, tableau dont je voulais passer le pointeur à ma fameuse fonction. Celle ci, par le biais d'une dll fournie, lance une acquisition de mesures depuis une carte spéciale (de chez digimétrie), à une fréquence assez élevée, et enregistre le tout dans mon tableau, mais comme je galérais comme un petit galérien, ben, j'ai un peu tout essayé

    PPS: C'est du Borland ?
    Oui. C'est un projet que je reprend (et punaise, c'est la que l'on se rend compte qu'un code bien commenté, ben, c'est nettement mieux, parce que là: j'ai jamais autant juré de ma vie
    D'ailleur, j'ai eu une idée, dans les options du projet, j'ai essayer de remettre tous les paramètre par défaut (cad ceux qu'il propose pour un nouveau projet), j'ai vu qu'il y avait des options pour le type de processeur (80386, pentium, mmx, etc), et d'autres sur les mémoires, etc... Bref, j'ai tout remis à zero, et oh miracle, le même code qui faisait un débordement de pile avant, ne le fais plus. au final, ça marche même plutot bien

    voici ce que ça donne au final, remis dans le projet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Création du tableau dynamiquement
      float *Capteurs = new float[NBPOINTS];   //NBPOINTS est un define
     
      Acquisition->AcqBuff(Capteur, NBPOINTS);  //Anciennement MaFonction
    //Acquisition est instancié au début du programme, il charge la dll, et initialise 2 ou 3 trucs
    Et crack, oh miracle, il me fais des acquisitions analogies à 1 kHz, sans que je ne m'en occupe c'est trop chouette


    Merci a vous tous pour les petites pistes a suivre, vous êtes trop fort

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/11/2011, 20h25
  2. Réponses: 5
    Dernier message: 21/09/2008, 09h45
  3. Réponses: 8
    Dernier message: 17/09/2008, 12h11
  4. [x86_64] Passer un pointeur sur tableau défini dans .data
    Par khazna dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 24/04/2008, 19h49
  5. problème our passer des string dans tableau d'int
    Par Battosaiii dans le forum C++
    Réponses: 9
    Dernier message: 15/07/2004, 17h42

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