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

Langage C++ Discussion :

Problème de pointeurs


Sujet :

Langage C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Par défaut Problème de pointeurs
    Bonjour, je développe une application avec QtCreator et je souhaite initialiser un tableau à double entrée de doubles **keys (keys[num_image][num_clé]) dans mon main avec une fonction de chargement et de lecture de clés, voici le code simplifié correspondant :

    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
    Dans le main :
     
    float **keys = new float *[num_images];
    int* num_keys= new int[num_images];
    loadKeys((ANNcoord **)keys, num_keys, num_images, key_files);
    //Test valeurs sortie
    for (i = 0; i < num_images; i++) {
           for (j=0; j<num_keys[i]*128; j++)
                  qDebug() << keys[i][j];
    }
     
    _______
     
     
    void loadKeys(ANNcoord **keys, int *num_keys, int num_images, std::vector<QString> key_files){
            for (int i = 0; i < num_images; i++) {
                keys[i] = NULL;
                num_keys[i] = ReadKeys(key_files[i], keys+i);
            }
        }
     
    _______
     
     
    int ReadKeys(QString filename, ANNcoord **keys, keypt_t **info = NULL)
        {
            QFile fichier(filename);
     
            if (!fichier.open(QIODevice::ReadOnly | QIODevice::Text)) {
                qDebug() << "Error: could not open " << filename;
                return 0;
            }
     
            QTextStream flux(&fichier);
            std::vector<Keypoint *> kps;
     
            int num = -1, len = -1;
            flux >> num >> len;
     
            if ((num == -1) || (len == -1)) {
                printf("Invalid keypoint file\n");
                return 0;
            }
     
            if (len != 128) {
                printf("Keypoint descriptor length invalid (should be 128).");
                return 0;
            }
     
            *keys = new ANNcoord[128 * num]; //ANNcoord = double
     
     
            for (int i = 0; i < num; i++) {
     
                flux.readLine();
                QString ligne = flux.readLine();
                for(int a = 0; a < 6;a++)
                    ligne += flux.readLine();
     
                QStringList values = ligne.trimmed().split(QString(" "));
                for (int b = 0; b < 128; ++b) {
                    (*keys)[128 * i + b] = values.at(b).toDouble();
     
                }
     
            }
     
            //Test valeurs sortie
            for (int b = 0; b < 128*num; b++){
                 qDebug() << (*keys)[b];
            }
            return num;
        }
    Les valeurs de sortie sont bonnes dans le ReadKeys, mais complètement fausses dans le main, si quelqu'un a une explication, voire une solution... je suis preneur.

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    Bonjour,

    bizarre car je ne vois rien qui explique cela et si je transforme votre prog pour ne pas utiliser Qt ni lire les valeurs dans les fichiers les deux affichages donnent bien la même chose
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Par défaut
    Et pourtant... dans le ReadKeys :

    61
    3
    0
    0
    0
    0
    0
    15
    93
    0
    0
    2
    4
    4
    16
    134
    6
    0
    1
    30
    85
    46
    29
    34
    13
    9

    qui sont bel et bien les valeurs des clés, mais dans le main...

    0
    3.22656
    0
    2.125
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    2.71875
    0
    3.36328
    0
    0
    0
    0


    P.S. : J'utilise MPI dans ce programme pour de la parallélisation, je ne pense pas qu'il y ait une incidence à l'exécution avec mpirun mais bon.... de toute manière ce code n'est exécuté que par le processeur "maître"

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Par défaut
    ANNcoord étant un double, ça a foutu un petit peu le souk, mais maintenant c'est réglé ^^

  5. #5
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    désolé, dans mon test j'avais mis float au lieu de double
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

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

Discussions similaires

  1. Problème de pointeurs..embrouillé
    Par Frenchy dans le forum C++
    Réponses: 11
    Dernier message: 10/03/2005, 16h33
  2. Problème de pointeur avec un TQuery
    Par Oluha dans le forum Bases de données
    Réponses: 3
    Dernier message: 25/01/2005, 13h57
  3. Problème de pointeur
    Par toma_lille dans le forum C++
    Réponses: 1
    Dernier message: 07/12/2004, 21h26
  4. [MFC] Problème de pointeur !!
    Par acastor dans le forum MFC
    Réponses: 7
    Dernier message: 19/03/2004, 15h50
  5. TBitmap et problèmes de pointeurs...
    Par benj63 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/07/2003, 13h39

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