2014-04-13 8 views
1

QProcess 호출이 포함 된 Qt 4 응용 프로그램을 컴파일하려고합니다.Qt 4 - Q 프로세스 문제

Release-Version으로 컴파일하는 데는 문제가 없지만 Debug-Version을 실행할 때 항상 SegmentionFault-Error가 발생합니다.

My Qt 버전은 4.8.2이며 Fedora 및 Debian OS에서 사용해 보았습니다.

비슷한 문제가있는 사람이 있습니까? 나는 그것을 알아낼 수 없다!

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

좋은 하루 되세요, 마르쿠스

+0

답장을 보내 주셔서 감사합니다. gdb가 나를 보여줍니다 : http://pastebin.com/A0pREW1S –

+0

hmmm, qprocess-stuff를 주석 처리하면 아무런 문제가 없습니다. mainwindow는 꽤 비어 있습니다. 단지 새로운 qt-gui 응용 프로그램을 만들었습니다. http://pastebin.com/dm5NwniH –

+0

http://pastebin.com/yABLvmaQ 헤더입니다. –

답변

0

충돌이 라인으로 인해 발생 :

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

이유이다 :

MyApplication(int argc, char **argv); 

당신은 그것을 수정해야 , 참고없이, 기본적으로 파괴되는 임시 사본이 포함되어 있지만 주소 그것의 아직도 저장됩니다. 충돌은 이후의 액세스에서 발생합니다.

경고 : 다음 QCoreApplication 객체의 전체 수명 동안 유효한 유지해야는 argc와 argv를 참조하는 데이터

QApplication 생성자의 경고 in the documentation를 참조하십시오. 또한 argc는 0보다 커야하며 argv는 하나 이상의 유효한 문자열을 포함해야합니다.

그런데, 아마도 귀하의 경우에는 QApplication을 서브 클래 싱 할만한 가치가 없습니다. 그래도 그래도 QProcess으로 백그라운드 프로세스를 처리하기 위해 만든 힙 개체를 삭제하지 않으면 메모리가 누출되지 않도록하십시오.

+0

도움을 주셔서 감사합니다. 디버그 모드에서 왜 깨지는 지 아십니까? –

+0

@ m.schmidinger 정의되지 않은 동작입니다. 그것은 핵 공격을 시작하지 않았다는 것을 감사하십시오 :) –