Pregunta

Estoy intentando compilar una aplicación Qt 4 que contiene la llamada de QProcess.

No hay problema en compilarlo como versión de lanzamiento, pero siempre obtengo un error de SegmentionFault cuando ejecuto la versión de depuración.

Mi versión de Qt es 4.8.2 y la probé en Fedora y Debian OS.

¿Alguien de ustedes alguna vez tuvo problemas similares?¡No puedo resolverlo!

#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();
}

Que tengas un buen día, Markus

¿Fue útil?

Solución

El bloqueo es causado por esta línea:

MyApplication(int argc, char **argv);

Deberías modificarlo a:

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

La razón es que, sin referencia, se incluye una copia temporal que básicamente se destruye, mientras que su dirección aún se almacena.El accidente se produce en el acceso posterior.

ver la advertencia en la documentación del QApplication constructor:

Advertencia:Los datos a los que hacen referencia argc y argv deben seguir siendo válidos durante toda la vida útil del objeto QCoreApplication.Además, argc debe ser mayor que cero y argv debe contener al menos una cadena de caracteres válida.

Dicho esto, probablemente no valga la pena subclasificar QApplication en tu caso.Incluso si lo hace, asegúrese de no perder memoria al no eliminar el objeto de montón creado para manejar el proceso en segundo plano con QProcess.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top