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

Discussion :

Allocation mémoire ?

  1. #1
    Membre confirmé
    Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut Allocation mémoire ?
    Bonjour,

    Je vous joins le code d'une application type IHM simplifiée, où le principe est d'extraire d'une base de données, le territoire (ligne de la BdD) et la thématique (colonne de la BdD) sélectionnée par l'utilisateur (la version réelle est beaucoup plus lourde, regroupant des centaines de territoires et plusieurs millions de données, mais la philosophie est rigoureusement la même).

    Cette application compile et s'exécute sans difficulté; la version 'release' du .exe a été placée sur un serveur pour que l'ensemble des employés puissent avoir accès à l'interface (300 machines clones, type Windows NT).

    Sur la moitié des postes, l'application plante dès l'ouverture, sur les autres il n'y a aucun soucis... Je pense à une allocation mémoire difficile mais je n'arrive pas à cerner, le débugeur de Qt Creator ne m'indiquant aucun bug.

    Certains ont-ils déjà rencontré ce genre de problème ?

    L'algorithme de récupération des données vous semble-t-il cohérent : création d'un pointeur et d'une table (QVector) - lecture de la base et stockage sur la table - extraction des données de la table vers le pointeur - édition du résultat à partir du pointeur ?

    Plus étrange, en essayant plusieurs versions test de l'application sur un des poste récalcitrant, celui-ci a fini par ne plus planter avec la version originale, sans que je n'ai modifié quoi que ce soit...

    Voilà, je sais, les indices sont minces mais cela fait quinze jours que je tourne en rond sur ce problème

    Bonne fin de journée à tous
    Fichiers attachés Fichiers attachés

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut.
    Tu as le problème avec le code que tu donne?
    As tu essayé avec une version visual studio?
    Es ce que toutes tes machines utilise la même langue?
    Quand il y as un plantage, qu'elle type de message d'erreur as tu?

  3. #3
    Membre confirmé
    Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    Citation Envoyé par yan Voir le message
    Salut.
    Tu as le problème avec le code que tu donne?
    As tu essayé avec une version visual studio?
    Es ce que toutes tes machines utilise la même langue?
    Quand il y as un plantage, qu'elle type de message d'erreur as tu?
    Oui j'ai le problème avec le code joint, mais je n'ai pas essayé avec une version Visual Studio : peut-être effectivement que Windows supporterait mieux ?

    A priori toutes les machines sont clonées et utilisent le même langage; et le message d'erreur est du type "L'application a rencontré un problème et doit fermer. Nous vous prions de ...", mais pas "Erreur fatale"

    Bonne soirée

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par dasycarpum Voir le message
    Oui j'ai le problème avec le code joint, mais je n'ai pas essayé avec une version Visual Studio : peut-être effectivement que Windows supporterait mieux ?
    Non mais ça peut faire apparaître l'erreur.
    Tu pourrais essayer sous linux aussi. Vue le code, ça devrais compiler sans trop de problème.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plus étrange, en essayant plusieurs versions test de l'application sur un des poste récalcitrant, celui-ci a fini par ne plus planter avec la version originale, sans que je n'ai modifié quoi que ce soit...
    Tu as surement une erreur mémoire. Et une bien chiante vue ce que tu dit... Maintenant faut la trouver


    Je testerais ton code quand j'aurais 2 seconds.

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut.
    Je regardais ton code. Y as des choses un peu bizzare comme ton pDonneesLocales. La seule chose que j'ai vue qui pourrai te faire planté et la lecture du cvs. Il faudrait le blinder.

    Sinon,
    es tu sur que Qt est bien installé sur chaque machine? ne peut il pas y avoir plusieurs version de Qt?
    Comment installe tu ton appli avec les dll de Qt?
    Es ce que les machine qui plante utilise le même csv?
    As tu regardé la mémoire utilisé par ton appli?

  6. #6
    Membre confirmé
    Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    Citation Envoyé par yan Voir le message
    Salut.
    La seule chose que j'ai vue qui pourrai te faire planté et la lecture du cvs. Il faudrait le blinder.
    C'est effectivement une piste intéressante : en supprimant la fonction de lecture du .csv sur une version test, je n'ai plus de plantage sur les postes incriminés ! Mais comment peut-on blinder la fonction ??
    Sinon,
    es tu sur que Qt est bien installé sur chaque machine? ne peut il pas y avoir plusieurs version de Qt?
    Comment installe tu ton appli avec les dll de Qt?
    Es ce que les machine qui plante utilise le même csv?
    As tu regardé la mémoire utilisé par ton appli?
    J'ai placé l'.exe sur le répertoire d'un serveur, avec les .dll et tous les .csv; les agents créent simplement un raccourci sur leur bureau (Qt n'est installé sur aucune machine).
    Quant à la mémoire, il n'y a apparemment aucune fuite, elle est stable toute au long de l'utilisation.

    Merci pour cette piste prometteuse sur la lecture des .csv (pourtant je m'étais inspiré du bouquin Qt4 et C++ de Blanchette et Summerfield...). Reste à trouver la parade pour sécuriser

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Au minimum, vérifie la taille du tableau après le Split.
    Pour être sur de tes calcule, tu devrais vérifier qu'il parse bien les nombres.
    Tu traite la première ligne comme des données alors que c'est les noms des colonne.

    Tu utilise Qt mingw?

  8. #8
    Membre confirmé
    Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    Citation Envoyé par yan Voir le message
    Au minimum, vérifie la taille du tableau après le Split.
    Pour être sur de tes calcule, tu devrais vérifier qu'il parse bien les nombres.
    Tu traite la première ligne comme des données alors que c'est les noms des colonne.
    OK je vais essayer

    Tu utilise Qt mingw?
    Oui - et la version 4.8.1 de Qt

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par dasycarpum Voir le message
    Oui - et la version 4.8.1 de Qt
    Tu fournie bien les dll de mingw aussi?

  10. #10
    Membre confirmé
    Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    Citation Envoyé par yan Voir le message
    Tu fournie bien les dll de mingw aussi?
    Je pense mais je n'en suis pas sûr; j'ai dû aller rechercher les dll d'une ancienne version installée de Qt Library pour que cela tourne, celles de Qt SDK ne fonctionnaient pas... Boulette ?

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par dasycarpum Voir le message
    Boulette ?
    Si c'est pas la même version de dll, ça peut.

    Il faut prendre celle dans le répertoire bin de mingw.

  12. #12
    Membre confirmé
    Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    Citation Envoyé par yan Voir le message
    1. Au minimum, vérifie la taille du tableau après le Split.
    2. Pour être sur de tes calcule, tu devrais vérifier qu'il parse bien les nombres.
    3. Tu traite la première ligne comme des données alors que c'est les noms des colonne.
    Voilà, j'ai inclus tes points 1 et 3, mais comment faire pour le 2 ?

    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
     
    void MainWindow::LireFichierDonnees(QVector<Donnees>& departement)
    {
        Donnees data;
     
        QString chemin = "donnees.csv" ;
     
        QFile fichier(chemin);
        QMessageBox messageAlert;
        if (!fichier.open(QFile::ReadOnly)) {
            messageAlert.setWindowTitle("Attention !");
            messageAlert.setIcon(QMessageBox::Warning);
            messageAlert.setText(QString::fromUtf8("Problème non critique !"));
            messageAlert.setInformativeText(QString::fromUtf8("<center><big>Le fichier :</big> \"<b>%1</b>\" <big>est absent du serveur!</big></center>").arg(chemin));
            messageAlert.exec();
        }
     
        QTextStream flux(&fichier);
        int nbLigne = 0;
        while(!flux.atEnd()){
            QString ligne = flux.readLine();
            ++nbLigne;
            if (nbLigne > 0){
                QStringList champ = ligne.split(";");
                if (champ.size() == 4){
                    data.codeInsee = champ.at(0).toInt();
                    data.population = champ.at(1).toDouble();
                    data.menage = champ.at(2).toDouble();
                    data.emploi = champ.at(3).toDouble();
     
                    departement.push_back(data);
                }
            }
        }
    }
    NB : le pDonneesLocales que tu trouvais bizarre me sert à trimbaler des données d'une thématique à l'autre sans devoir les passer systématiquement en paramètre aux fonctions d'extraction ou d'édition. Dans ce cas simple, cela n'a pas beaucoup de sens, mais quand j'ai plusieurs dizaines de thématiques qui ont parfois des liens communs (comme la population, la surface d'une commune, ...) cela économise beaucoup de casse-tête...

  13. #13
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par dasycarpum Voir le message
    Voilà, j'ai inclus tes points 1 et 3, mais comment faire pour le 2 ?
    Je ne sais plus si les fonctions toDouble utilise la locale de la machine, et en français un nombre utilise une , et non un .
    http://qt-project.org/doc/qt-4.8/qstring.html#toDouble


    Ces fonctions permettent de passer un pointeur sur un bool pour savoir si ça c'est bien passé.

  14. #14
    Membre confirmé
    Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    Citation Envoyé par yan Voir le message
    Je ne sais plus si les fonctions toDouble utilise la locale de la machine, et en français un nombre utilise une , et non un .
    Tous mes double des .csv sont avec des '.' quelque soit la locale de la machine; le test pourrait être :

    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
     
        QTextStream flux(&fichier);
        int nbLigne = 0; bool ok = true; int entier = 0; double reel = 0;
        while(!flux.atEnd()){
            QString ligne = flux.readLine();
            ++nbLigne;
            if (nbLigne > 0){
                QStringList champ = ligne.split(";");
                if (champ.size() == 4){
                    entier = champ.at(0).toInt(&ok, 10);
                    if (ok) data.codeInsee = entier;
                    reel = champ.at(1).toDouble(&ok);
                    if (ok) data.population = reel;
                    reel = champ.at(2).toDouble(&ok);
                    if (ok) data.menage = reel;
                    reel = champ.at(3).toDouble(&ok);
                    if (ok) data.emploi = reel;
     
                    departement.push_back(data);
                }
            }
        }
    Mais ça fait lourd, non ?

  15. #15
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par dasycarpum Voir le message
    Mais ça fait lourd, non ?
    oui et non. Y as pas beaucoup de solution pour cela :/

    C'est pas très claire dans la doc et j'ai un doute avec Qt. Mais sous d'autre os comme WP ou android; y as ce problème.

    Les autres corrections ont elles résoluent ton problème de crash?

  16. #16
    Membre confirmé
    Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    Citation Envoyé par yan Voir le message
    Les autres corrections ont elles résoluent ton problème de crash?
    Oui, pour cette version ça passe plutôt pas mal; je vais déjà me coltiner toutes les modifs 1 et 3 sur la version originale, et à défaut de résultats probants j'entreprendrai la 2.

    Un très grand merci pour le temps que tu y as consacré . Je te tiens au courant dès que j'aurai tout modifié.

  17. #17
    Membre confirmé
    Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    Citation Envoyé par dasycarpum Voir le message
    Oui, pour cette version ça passe plutôt pas mal; je vais déjà me coltiner toutes les modifs 1 et 3 sur la version originale, et à défaut de résultats probants j'entreprendrai la 2.
    Les corrections m'ont permis d'identifier un certains nombre de problèmes dans les fichiers .csv, ce qui a déjà résolu pas mal de soucis.

    J'ai également recompilé avec MinGW version x86 32 bit au lieu de la version GCC, et cela a définitivement solutionné les dernières erreurs mémoire.

    Merci à yan et bonne semaine à tous.

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

Discussions similaires

  1. Pb d'allocation mémoire malloc
    Par oz80 dans le forum C++
    Réponses: 5
    Dernier message: 18/11/2005, 17h23
  2. Limite Allocation Mémoire d'un tableau d'entier
    Par l9ft b9hind dans le forum C++
    Réponses: 5
    Dernier message: 27/10/2005, 19h29
  3. Allocation mémoire
    Par DestyNov@ dans le forum C++
    Réponses: 9
    Dernier message: 23/08/2005, 08h09
  4. [Pointeur] Allocation mémoire
    Par Rayek dans le forum Langage
    Réponses: 22
    Dernier message: 20/05/2005, 10h26
  5. Allocation mémoire dynamique
    Par ITISAR dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/01/2005, 09h59

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