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 :

Problème de mémoire et allocation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 9
    Par défaut Problème de mémoire et allocation
    Bonjour,

    J'ai écrit une application Qt qui affiche une grille (Board) composée de cellules (Cell). Tout s'affiche comme je veux mais j'ai plusieurs problèmes.
    1. Lorsque je ferme la fenêtre, l'application plante. J'ai mis l'appel à la classe Board en commentaire (donc ma grille ne s'affiche plus) et là, plus de problème de crash à la fermeture.
    2. Lorsque l'on clique sur une cellule, un petit menu (QMenu) apparaît et l'on peut choisir un chiffre et la cellule se met alors à jour. Mais lorsque je clique sur la cellule, et que je clique à côté (le menu apparaît puis disparaît), l'application plante aussi.

    Ma fenêtre principale
    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
     
    #include "gui2.h"
     
    GUI2::GUI2(QWidget *parent)
        : QMainWindow(parent),
          ui(new Ui::GUI2Class)
    {
    	ui->setupUi(this);
    	Test t(9);
    	b = new Board(t, parent); //Board * b
    	setCentralWidget(b);
    	setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
     
    }
     
    GUI2::~GUI2()
    {
    	delete b;
    	delete ui;
    }
    Ma classe Board
    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
     
    #include "Board.hpp"
     
    Board::Board(Test t, QWidget *parent) :
    		QWidget(parent), t(t) {
            //Cell * cell
    	QGridLayout * layout = new QGridLayout;
    	int i = 0, j = 0;
     
    	while (i < this->t.size()) {
    		while (j < this->t.size()) {
    			if (this->sudo.getROnly()[i][j] != 0) {
    				cell = new Cell(i,j, this->t.get(i, j), this->t.size(), true);
    			} else {
    				cell = new Cell(i,j, this->t.get(i, j), this->t.size());
    			}
     
    			layout->addWidget(cell, i, j);
     
    			j++;
    		}
    		j = 0;
    		i++;
    	}
     
    	layout->setSpacing(0);
    	this->setLayout(layout);
    }
     
    Board::~Board() {
    	delete cell;
    }
    Et le bout de code qui affiche le petit menu
    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
     
    void Cell::popup(const QPoint& pt) {
    	QPoint global = this->mapToGlobal(pt);
    	QMenu pPopup(this);
     
    	for (int i = 1; i <= sizez; i++) {
    		QAction * act = new QAction(QString::number(i), this);
    		act->setData(i);
    		pPopup.addAction(act);
    	}
     
    	//connect(pPopup, SIGNAL(triggered()), this, SLOT(setValue()));
    	QAction* pItem = pPopup.exec(global); //Pas de connect après car exec renvoie déjà l'élément triggered
    	setValue(pItem);
     
    }
    Ce que j'ai remarqué dans ce dernier, c'est qu'il me crée à chaque fois un nouveau menu, laissant l'autre en mémoire.

    Je ne suis pas encore très familier avec la gestion de la mémoire sous Qt même si j'ai déjà lu quelques articles là dessus.

    Merci pour votre aide

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 424
    Par défaut prob plantage
    Je suis pas très bon car débutant et non programmeur de métier, mais je me demande si c'est pas l'appel à addaction dans ta boucle qui pose prob.

    A chaque appel de ta fonction, le addaction est déclenché. Essayes en faisant un seul appel à addaction lords de l'ouverture de l'application, et plutôt que de recréer un addaction,tu actives et/ou désactives les menus avec show/hide.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 9
    Par défaut
    Merci pour ta réponse C'est vrai que je crée à chaque fois le menu, donc une solution serait effectivement de cacher/afficher le menu mais la méthode exec permet d'afficher le menu à un endroit précis Une solution serait de créer une classe. Avantage : n'avoir qu'une seule instance et l'appeler quand besoin est.

    J'ai résolu le premier problème en supprimant les delete dans les classes appelées pour GUI2.

Discussions similaires

  1. Probléme étrange sur l'allocation mémoire
    Par yann458 dans le forum C++
    Réponses: 14
    Dernier message: 18/07/2014, 15h07
  2. Problème de mémoire sur une allocation de byte
    Par Fooshi dans le forum Android
    Réponses: 2
    Dernier message: 05/04/2013, 10h03
  3. Réponses: 5
    Dernier message: 06/07/2011, 16h35
  4. Problème de mémoire avec BDE
    Par Machuet dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 11h11
  5. Problème de mémoire Affichage images
    Par Repti dans le forum C++Builder
    Réponses: 6
    Dernier message: 29/03/2004, 21h06

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