Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [solved] SIGSEGV segmentation fault
Forum Updated to NodeBB v4.3 + New Features

[solved] SIGSEGV segmentation fault

Scheduled Pinned Locked Moved General and Desktop
17 Posts 4 Posters 8.0k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    asma11
    wrote on last edited by
    #2

    this is my code :

    client.cpp:
    @#include "client.h"
    #include "ui_client.h"

    client::client(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::client)
    {
    ui->setupUi(this);
    QPixmap pix("C:/Users/asma/Desktop/mychat/client/pic.png");
    ui->label_4->setPixmap(pix);
    QPixmap pic("C:/Users/asma/Desktop/mychat/client/chatt.png");
    ui->label_6->setPixmap(pic);

    socket = new QTcpSocket(this);
    connect(socket, SIGNAL(readyRead()), this,SLOT(donneesRecues()));
    connect(socket, SIGNAL(connected()), this, SLOT(connecte()));
    connect(socket, SIGNAL(disconnected()), this,SLOT(deconnecte()));
    connect(socket, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(erreurSocket(QAbstractSocket::SocketError)));
    tailleMessage = 0;
    

    }

    client::~client()
    {
    delete ui;
    }

    void client::on_boutonConnexion_clicked()
    {
    // On annonce sur la fenêtre qu'on est en train de se connecter
    ui-> listeMessages->append(tr("<em>Tentative de connexion en cours...</em>"));
    ui-> boutonConnexion->setEnabled(false);
    socket->abort(); // On désactive les connexions précédentes s'il y en a
    socket->connectToHost(serveurIP->text(), serveurPort->value());
    // On se connecte au serveur demandé
    }

    void client::on_boutonEnvoyer_clicked()
    {
    QByteArray paquet;
    QDataStream out(&paquet, QIODevice::WriteOnly);
    // On prépare le paquet à envoyer
    QString messageAEnvoyer = tr("<strong>") + pseudo->text() +tr("</strong> : ") + message->text();
    out << (quint16) 0;
    out << messageAEnvoyer;
    out.device()->seek(0);
    out << (quint16) (paquet.size() - sizeof(quint16));
    socket->write(paquet); // On envoie le paquet
    ui-> message->clear(); // On vide la zone d'écriture du message
    ui->message->setFocus(); // Et on remet le curseur à l'intérieur
    }

    void client::on_message_returnPressed()
    {
    on_boutonEnvoyer_clicked();
    }
    void client::donneesRecues()
    {
    /* Même principe que lorsque le serveur reçoit un paquet :
    On essaie de récupérer la taille du message
    Une fois qu'on l'a, on attend d'avoir reçu le message entier (en se
    basant sur la taille annoncée tailleMessage)
    */
    QDataStream in(socket);
    if (tailleMessage == 0)
    {
    if (socket->bytesAvailable() < (int)sizeof(quint16))
    return;
    in >> tailleMessage;
    }
    if (socket->bytesAvailable() < tailleMessage)
    return;
    // Si on arrive jusqu'à cette ligne, on peut récupérer lemessage entier
    QString messageRecu;
    in >> messageRecu;
    // On affiche le message sur la zone de Chat
    ui->listeMessages->append(messageRecu);
    // On remet la taille du message à 0 pour pouvoir recevoir de futurs messages
    tailleMessage = 0;
    }
    // Ce slot est appelé lorsque la connexion au serveur a réussi
    void client::connecte()
    {
    ui->listeMessages->append(tr("<em>Connexion réussie !</em>"));
    boutonConnexion->setEnabled(true);
    }
    // Ce slot est appelé lorsqu'on est déconnecté du serveur
    void client::deconnecte()
    {
    ui->listeMessages->append(tr("<em>Déconnecté du serveur</em>"));
    }
    // Ce slot est appelé lorsqu'il y a une erreur
    void client::erreurSocket(QAbstractSocket::SocketError erreur)
    {
    switch(erreur) // On affiche un message différent selon l'erreur qu'on nous indique
    {
    case QAbstractSocket::HostNotFoundError:
    ui->listeMessages->append(tr("<em>ERREUR : le serveur n'apas pu être trouvé. Vérifiez l'IP et le port.</em>"));
    break;
    case QAbstractSocket::ConnectionRefusedError:
    ui->listeMessages->append(tr("<em>ERREUR : le serveur arefusé la connexion. Vérifiez si le programme "serveur" a bien été lancé. Vérifiez aussi l'IP et le port.</em>"));
    break;
    case QAbstractSocket::RemoteHostClosedError:
    ui->listeMessages->append(tr("<em>ERREUR : le serveur a coupé la connexion.</em>"));
    break;
    default:
    ui->listeMessages->append(tr("<em>ERREUR : ") + socket->errorString() + tr("</em>"));
    }
    ui->boutonConnexion->setEnabled(true);
    }
    @

    1 Reply Last reply
    0
    • A Offline
      A Offline
      asma11
      wrote on last edited by
      #3

      client.h
      @#ifndef CLIENT_H
      #define CLIENT_H

      #include <QDialog>
      #include<QtNetwork>
      #include<QtWidgets>
      #include"ui_client.h"
      namespace Ui {
      class client;
      }

      class client : public QDialog,private Ui::client
      {
      Q_OBJECT

      public:
      explicit client(QWidget *parent = 0);
      ~client();

      private slots:
      void on_boutonConnexion_clicked();

      void on_boutonEnvoyer_clicked();
      
      void on_message_returnPressed();
      void donneesRecues();
      void connecte();
      void deconnecte();
      void erreurSocket(QAbstractSocket::SocketError erreur);
      

      private:
      Ui::client *ui;
      QTcpSocket *socket; // Représente le serveur
      quint16 tailleMessage;
      };

      #endif // CLIENT_H
      @

      1 Reply Last reply
      0
      • A Offline
        A Offline
        asma11
        wrote on last edited by
        #4

        login.h:
        @#ifndef LOGIN_H
        #define LOGIN_H

        #include <QMainWindow>
        #include<QtSql>
        #include<QDebug>
        #include<QFileInfo>
        #include<QDialog>
        #include"client.h"
        #include"inscription.h"

        namespace Ui {
        class login;
        }

        class login : public QMainWindow
        {
        Q_OBJECT

        public:
        explicit login(QWidget *parent = 0);
        ~login();
        QSqlDatabase mydb;
        bool connOpen()
        {
        mydb = QSqlDatabase::addDatabase("QSQLITE");
        mydb.setDatabaseName("C:/sqlite/users.sqlite");
        if(!mydb.open())
        {
        qDebug()<<"failed to open the database";
        return false;
        }
        else
        {
        qDebug()<<"Connected...";
        return true;
        }
        }
        void connClose()
        {
        mydb.close();
        mydb.removeDatabase(QSqlDatabase::defaultConnection);
        }

        private slots:
        void on_pushButton_clicked();

        void on_pushButton_2_clicked();
        

        private:
        Ui::login *ui;
        };

        #endif // LOGIN_H
        @

        1 Reply Last reply
        0
        • A Offline
          A Offline
          asma11
          wrote on last edited by
          #5

          login.cpp:
          @#include "login.h"
          #include "ui_login.h"

          login::login(QWidget *parent) :
          QMainWindow(parent),
          ui(new Ui::login)
          {
          ui->setupUi(this);
          QPixmap pic("C:/Users/asma/Desktop/mychat/client/login.png");
          ui->label_4->setPixmap(pic);

          if(!connOpen())
              ui->label_3->setText("failed to open database");
          else
              ui->label_3->setText("Connected");
          

          }

          login::~login()
          {
          delete ui;
          }

          void login::on_pushButton_clicked()
          {
          QString username, password;
          username = ui->lineEdit_username->text();
          password = ui->lineEdit_password->text();

          if(!connOpen())
          {
              qDebug()<<"failed to open database";
              return;
          }
          connOpen();
          QSqlQuery qry;
          //qry.prepare("select * from users where pseudo = '"+username+"' and mot_de_passe = '"+password+"'");
          qry.prepare("select * from users where pseudo = :username and mot_de_passe = :password");
                      qry.bindValue(":username",username);
                      qry.bindValue(":password",password);
          if (qry.exec&#40;&#41;)
          {
              int count=0;
              while(qry.next())
              {
                  count++;
              }
              if(count==1)
              {
                  ui->label_3->setText("username and password are correct");
                  connClose();
                  this->hide();
                  client c;
                  c.setModal(true);
                  c.exec&#40;&#41;;
              }
              if(count<1)
              {
                  ui->label_3->setText("username and password incorrect , veuillez s'inscrir");
                  connClose();
                  this->hide();
                  inscription Inscription;
                  Inscription.setModal(true);
                  Inscription.exec&#40;&#41;;
              }
          
          }
          else qDebug()<< qry.lastError();
          

          }

          void login::on_pushButton_2_clicked()
          {
          this->hide();
          inscription Inscription;
          Inscription.setModal(true);
          Inscription.exec();
          }
          @

          1 Reply Last reply
          0
          • K Offline
            K Offline
            KushalAusula
            wrote on last edited by
            #6

            Hi,
            As far as I know this error could be caused due to accessing a NULL POINTER of invalid memory.

            1 Reply Last reply
            0
            • K Offline
              K Offline
              KushalAusula
              wrote on last edited by
              #7

              Hi,
              As far as I know this error could be caused due to accessing a NULL POINTER or invalid memory.

              1 Reply Last reply
              0
              • I Offline
                I Offline
                Ildar
                wrote on last edited by
                #8

                What are type of listeMessages object? And are you initialize listeMessages?

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  asma11
                  wrote on last edited by
                  #9

                  Hi , listeMessages is a QTextBrowser

                  1 Reply Last reply
                  0
                  • A Offline
                    A Offline
                    asma11
                    wrote on last edited by
                    #10

                    i have changed s.th and now the debugger shows me that the ploblem is on line 33 :
                    socket->connectToHost(serveurIP->text(), serveurPort->value());

                    1 Reply Last reply
                    0
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #11

                      Hi,

                      From the code you posted, neither serveurIP nor serveurPort are initialized

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      0
                      • A Offline
                        A Offline
                        asma11
                        wrote on last edited by
                        #12

                        serveurIP is a QLineEdit ,serveurPort is a QDableSpinBox : both are inisialised in client.ui

                        1 Reply Last reply
                        0
                        • SGaistS Offline
                          SGaistS Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on last edited by
                          #13

                          Then, the calls should be

                          @socket->connectToHost(ui->serveurIP->text(), ui->serveurPort->value());@

                          Interested in AI ? www.idiap.ch
                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply
                          0
                          • A Offline
                            A Offline
                            asma11
                            wrote on last edited by
                            #14

                            it's ok i have solved this problem but now another error appaired it's related with socket i will create another discussion . Thanx everybody for help :)

                            1 Reply Last reply
                            0
                            • SGaistS Offline
                              SGaistS Offline
                              SGaist
                              Lifetime Qt Champion
                              wrote on last edited by
                              #15

                              So what was the problem ?

                              Since you solved it, please update the thread title prepending [solved] so other forum users may know a solution has been found :)

                              Interested in AI ? www.idiap.ch
                              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                              1 Reply Last reply
                              0
                              • A Offline
                                A Offline
                                asma11
                                wrote on last edited by
                                #16

                                Hi ,the problem was on: "socket->connectToHost(ui->serveurIP->text(), ui->serveurPort->value()); " on this line I forget to put ui-> as you told me @SGaist , thanx for help.

                                1 Reply Last reply
                                0
                                • SGaistS Offline
                                  SGaistS Offline
                                  SGaist
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #17

                                  What is strange is that this would compile, so I guess you have member variables with these names in your class ? If so remove you should remove them

                                  Interested in AI ? www.idiap.ch
                                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                  1 Reply Last reply
                                  0

                                  • Login

                                  • Login or register to search.
                                  • First post
                                    Last post
                                  0
                                  • Categories
                                  • Recent
                                  • Tags
                                  • Popular
                                  • Users
                                  • Groups
                                  • Search
                                  • Get Qt Extensions
                                  • Unsolved