Question

J'essaie de compiler une application Qt 4 qui contient l'appel de QProcess.

Ce n'est pas un problème de le compiler en tant que Release-Version, mais j'obtiens toujours une SegmentionFault-Error lorsque j'exécute la Debug-Version.

Ma version de Qt est la 4.8.2 et je l'ai essayée sur Fedora et Debian OS.

Est-ce que quelqu'un d'entre vous a déjà eu des problèmes similaires ?Je ne peux pas comprendre!

#include <QApplication>
#include "mainwindow.h"
#include <QProcess>

class MyApplication : public QApplication{
public:
    QProcess * proc;
    MyApplication(int argc, char** argv) : QApplication(argc, argv){
        proc = new QProcess();
    }
};

int main(int argc, char *argv[])
{
    MyApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

Passez une bonne journée, Markus

Était-ce utile?

La solution

Le crash est provoqué par cette ligne :

MyApplication(int argc, char **argv);

Vous devez le modifier pour :

MyApplication(int &argc, char **argv);

La raison en est que, sans référence, une copie temporaire est incluse qui est essentiellement détruite, tandis que son adresse est toujours stockée.Le crash se produit ensuite à l'accès.

Voir l'avertissement dans les documents de la QApplication constructeur:

Avertissement:Les données référencées par argc et argv doivent rester valides pendant toute la durée de vie de l'objet QCoreApplication.De plus, argc doit être supérieur à zéro et argv doit contenir au moins une chaîne de caractères valide.

Cela étant dit, cela ne vaut probablement pas la peine de sous-classer QApplication dans ton cas.Même si vous le faites, assurez-vous de ne pas perdre de mémoire en ne supprimant pas l'objet tas créé pour gérer le processus en arrière-plan avec QProcess.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top