Read Access Violation Exception



  • I'm working on a project for a class which involves creating a small "teaching tool." Well, I decided to create a main menu window with pushbuttons that would open another widget containing a picture and information on the topic. I created the first widget and did the slot and everything was wonderful in the world. Now, I tried adding a second pushbutton. This didn't end so well. I created it the exact same way using the exact same commands and pointers and everything, however, it keeps giving me a Read Access Violation Exception. If I comment out the code for the second button, the program works again, even though I running the exact same commands in each method.

    It would be appreciated if I could receive help as soon as possible because this project is due friday.

    @
    void MainMenu::on_PearlHarborButton_clicked()
    {
    if(!pearlHarbor)
    {
    pearlHarbor = new PearlHarbor(this);
    }
    pearlHarbor->show();
    pearlHarbor->raise();
    pearlHarbor->activateWindow();
    }

    //offending method
    void MainMenu::on_WWIIButton_clicked()
    {
    if(!wwiiDialog)
    {
    wwiiDialog = new WWIIDialog(this);
    }

    wwiiDialog->show();
    wwiiDialog->raise();
    wwiiDialog->activateWindow();
    

    }
    @

    Header files:

    MainMenu.h
    @
    #include "ui_mainmenu.h"
    #include "pearlharbor.h"
    #include "wwiidialog.h"

    class MainMenu : public QMainWindow, private Ui::MainMenu
    {
    Q_OBJECT

    public:
    explicit MainMenu(QWidget *parent = 0);
    private slots:

    void on_PearlHarborButton_clicked();
    
    void on_WWIIButton_clicked();
    

    private:
    void loadImages();
    PearlHarbor *pearlHarbor;
    WWIIDialog *wwiiDialog;
    };
    @
    PearlHarbor.h
    @
    class PearlHarbor : public QDialog, private Ui::PearlHarbor
    {
    Q_OBJECT

    public:
    explicit PearlHarbor(QWidget *parent = 0);
    private slots:
    void on_Close_clicked();
    };
    @
    WWIIDialog.h
    @
    class WWIIDialog : public QDialog, private Ui::WWIIDialog
    {
    Q_OBJECT

    public:
    explicit WWIIDialog(QWidget *parent = 0);
    private slots:
    void on_Close_clicked();
    };
    @
    The close clicked method is the same for both, just the respected namespace is different.
    @
    void on_Close_clicked()
    {
    class name::hide();
    }
    @



  • Does your MainMenu constructor initialise pearlHarbor and wwiiDialog to zero? If not they may contain any old rubbish with the result that:
    @
    if (!wwiiDialog) {
    @
    may evaluate false even though the value is not a valid pointer. The result is you skip creating the dialog object and try to use the invalid pointer. Using an invalid pointer is a Bad Thing(tm).



  • I rearranged the code and initialized pearlHarbor and wwiiDialog in the MainMenu constructor, now it works.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.