Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Segmentation Fault
Forum - C/C++ - Segmentation Fault

Avatar
caiser (Normal User)
Newbie


Messaggi: 7
Iscritto: 12/09/2013

Segnala al moderatore
Postato alle 10:59
Mercoledì, 23/10/2013
Altro problema ragazzi.

Stavo facendo alcune prove quando l'ide mi restituisce sempre questo errore dal momento che tento
di aprire una nuova window.

MainForm.h

Codice sorgente - presumibilmente C/C++

  1. public slots:
  2.  
  3. void about();




MainForm.cpp

Codice sorgente - presumibilmente C/C++

  1. #include "About.h"
  2.  
  3. MainWindow::MainWindow(QWidget *parent) :
  4.     QMainWindow(parent),
  5.     ui(new Ui::MainWindow)
  6. {
  7.     ui->setupUi(this);
  8.  
  9.     connect(ui->action_About(),SIGNAL(trigged()),SLOT(about()));
  10.  
  11. }
  12.  
  13.  
  14.  
  15. void about()
  16. {
  17.  //in questo modo
  18.  
  19.   About t;
  20.   t.ShowNormal();
  21.  
  22.  
  23.  //O in quest'altro modo
  24.   About *t = new About();
  25.   t->ShowNormal();
  26.  
  27.  
  28.  
  29. }



In entrambi i modi ottengo l'errore "Segmentantion Fault"


Errore Assembly

0x6b937484  <+0x0000>         (QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> > const&)+9>:    call   0x6ba1baec <QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> >::data() const>

Come mai questo problema?

PM Quote
Avatar
Phi (Member)
Expert


Messaggi: 241
Iscritto: 30/12/2009

Segnala al moderatore
Postato alle 19:25
Sabato, 26/10/2013
Non capisco bene che cosa tu voglia fare, ne che cosa sia la classe "About".
Sarebbe meglio se scegliessi un titolo migliore per il topic e dicessi che stai lavorando con Qt.

Non ho ipotesi riguardo il motivo del Segmentation Fault (penso risieda in About.h o About.cpp), ma qualcosa posso già dirti:
Codice sorgente - presumibilmente C/C++

  1. void about()
  2. {
  3.   About t;
  4.   t.ShowNormal();
  5. }


Questa funzione non penso funzionerà anche dopo che avrai fixato l'errore. Infatti crea un'istanza della classe About, la mostra, poi la funzione termina e la classe viene distrutta. Quindi vedrai la finestra per qualche centesimo di secondo, poi sparirà.

Codice sorgente - presumibilmente C/C++

  1. void about()
  2. {
  3.  About *t = new About();
  4.   t->ShowNormal();
  5. }


Questa funzione non ha il problema della precedente (il variabile rimane in memoria anche dopo il termine della funzione). Tuttavia così perdi ogni traccia della variabile creata. Se hai implementato in About una "autodistruzione" dopo la chiusura della finestra allora va bene, altrimenti la variabile continuerà ad occupare memoria inutilmente.

Comunque, SE About è un Qdialog che deve mostrare delle informazione sull'applicazione, ALLORA ti consiglio di scrivere così:
Codice sorgente - presumibilmente C/C++

  1. void about()
  2. {
  3.   About aboutdialog;
  4.   aboutdialog.exec();
  5. }


Ultima modifica effettuata da Phi il 26/10/2013 alle 19:29
PM Quote