Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
952 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [résolu][c++] Plantage à la fermeture du programme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu][c++] Plantage à la fermeture du programme

n°1309078
Asmodean
Posté le 19-02-2006 à 15:33:32  profilanswer
 

Bonjour,
 
Je développe un petit projet pour mes études mais je tombe sur un problème à chaque fois que je ferme mon programme...ce n'est pas trop genant me direz vous mais de 1 ca fait pas propre et de 2 ca doit vouloir dire que je n'ai pas compris une subtilité du C++ et ca me derange beaucoup.
 
Mon programme est développez sous qt mais à prioris ce n'est pas ça qui doit faire planter...enfin j'espère que qt n'est pas incompatible avec ce que je veux faire...
 
Voila mon code: Othellier.h
 

Code :
  1. #ifndef H_OTHELLIER
  2. #define H_OTHELLIER
  3. #include <qlabel.h>
  4. #include <QWidget.h>
  5. #include <QGridLayout.h>
  6. class Case : public QWidget {
  7.     public:
  8.         Case( QWidget *parent = NULL );
  9. };
  10. class Othellier : public QLabel {
  11.     public:
  12.         Othellier( int sizeOthellier,  QWidget *parent = NULL );
  13.         ~Othellier();
  14.     private:
  15.         Case ** tiles;
  16.         int size;
  17. };
  18. #endif


 
Othellier.cpp

Code :
  1. #include "othellier.h"
  2. Othellier::Othellier( int sizeOthellier, QWidget *parent ){
  3.     int i,j;
  4.     QGridLayout *layout = new QGridLayout;
  5.     setPalette(QPalette(QColor(0, 0, 0)));
  6.     setAutoFillBackground(true);
  7.     setFixedSize(440,440);
  8.     tiles = new Case* [sizeOthellier];
  9.     for( i=0;i<sizeOthellier;i++){
  10.         tiles[i] = new Case [sizeOthellier];
  11.         for( j=0;j<sizeOthellier;j++){
  12.             Case *temp = &tiles[i][j];
  13.             layout->addWidget(temp,i,j);
  14.         }
  15.     }
  16.     this->setLayout(layout);
  17. }
  18. Othellier::~Othellier(){
  19.     int i;
  20.     for( i=0;i<size;i++){
  21.         delete [] tiles[i];
  22.     }
  23.     delete [] tiles;
  24. }
  25. Case::Case( QWidget *parent ) : QWidget(parent){
  26.     setPalette(QPalette(QColor(10, 173, 29)));
  27.     setAutoFillBackground(true);
  28.     setFixedSize(50,50);
  29. }


 
Main.cpp
 

Code :
  1. #include <qstring.h>
  2. #include <qapplication.h>
  3. #include <qpushbutton.h>
  4. #include <qmenubar.h>
  5. #include <qmenu.h>
  6. #include "othellier.h"
  7. int main(int argc, char *argv[])
  8. {
  9.     QApplication app(argc, argv);
  10.     Othellier myWindow(8);
  11.     myWindow.setGeometry(100, 100,700, 500);
  12.     myWindow.show();
  13.     return app.exec();
  14. }


 
J'imagine que ca vient du faite de la matrice allouer dynamiquement mais malgrès le delete ca marche toujours pas...


Message édité par Asmodean le 19-02-2006 à 20:38:20
mood
Publicité
Posté le 19-02-2006 à 15:33:32  profilanswer
 

n°1309096
Mackila
Posté le 19-02-2006 à 16:20:27  profilanswer
 

J'espère que quelqu'un te répondra ici, évite de poster sur 50 forums différents. Merci.
(Je ne connais pas qt, je ne me suis pas penché sur ton problème.)

n°1309122
Taz
bisounours-codeur
Posté le 19-02-2006 à 17:29:42  profilanswer
 

utlise un std::vector

n°1309126
breizhbugs
Posté le 19-02-2006 à 17:32:33  profilanswer
 

Salut,
Je crois que dans ton constructeur tu as oublié de faire:
size = sizeOthellier;
 
Du coup dans le destructeur, size est indefini et ca fait une erreur.

n°1309133
Taz
bisounours-codeur
Posté le 19-02-2006 à 17:41:46  profilanswer
 

nan. qu'il utlise std::vector
 
sinon ya  qu'a compter les new/delete, toujours par 2 ils vont.

n°1309226
el muchach​o
Comfortably Numb
Posté le 19-02-2006 à 19:19:37  profilanswer
 

Oui, il y a sans doute un déréférencement qq part après destruction d'un objet, donc un pb d'ordre de destruction.

n°1309296
Asmodean
Posté le 19-02-2006 à 20:37:42  profilanswer
 

Bon mon problème a été résolu...merci à vous pour toute vos idée. En effet y'avait l'erreur bête de pas affecter mon size. Mais le plantage a disparu dès l'instant où j'ai crée mon moc de QT. Il faut croire qu'il en avait besoin quoique ca m'étonne un peu. Donc j'ai pu enlever le constructeur pusique QT s'occupe de faire toute les libérations de mémoire comme je le pensait au début avant de rajouter mon destructeur.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [résolu][c++] Plantage à la fermeture du programme

 

Sujets relatifs
résolu Problème de concaténation de variable[resolu] Liste dynamiques liées, pb de récupération de variable
[VBScript] [RESOLU] difference entre winNT et LDAPafficher la 2eme colone d'un combobox = plantage
[Resolu] A la quete de '** glibc detected ** free()'[résolu]Socket non bloquants
[résolu]lecture tags id3v2[RESOLU] problème de condition
[resolu] Plugin Visual Editor ne fonctionne pas.[VBScript] [RESOLU]création administrateur de domaine
Plus de sujets relatifs à : [résolu][c++] Plantage à la fermeture du programme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR