2016-09-30 3 views
-1

첫 번째 Qt 프로그램 중 하나를 만들고 있습니다. 로그인 폼에 입력 된 사용자 이름과 비밀번호가 MYSQL 데이터베이스에 체크됩니다. 이 사용자 이름과 암호 기록이있는 경우 , 실행하는 동안 일부종료시 Qt 프로그램이 충돌 함

ui->something->hide(); 

이 특별한 Qt는 콘솔 출력이 없습니다하고있다,하지만 난 프로그램 충돌 "X"버튼을 닫을 때.

디버그 모드로 실행했습니다. 내가 가진 무엇 :가 운영 시스템에서 신호를 받았기 때문에

는 "열등한 정지 신호 이름 :. SIGSEGV 신호가 의미 : 분할 오류를

+1

스택 프레임을 검사 해보십시오. gdb로 – Trevir

+1

여기에 몇 가지 코드를 게시 할 수 있습니까? – PRIME

+1

이 어셈블리를보고 문제가 무엇인지 알 수 없으면 컴퓨터를 버리고 프로그래밍을 포기해야합니다. D – dtech

답변

0

아마 무슨 일이 일어나고 것은 당신이 가지고있다 범위를 벗어난 것입니다 객체.

뭔가 삭제, 또는 더 이상 접근하고 당신이 얻을 것이다 당신이 그것을 액세스 해보십시오.

두 가지 작업을 수행하십시오 :

Qt에서 개체를 만드는 경우 힙에 넣은 다음 개체 트리에서 부모 개체를 만듭니다. 예를 들어

:

QLabel * label = new QLabel(); // put it on the heap using new 

ui->centralWidget()->layout()->addWidget(label); 

레이블은 오브젝트 트리에서 지금이다. 레이블의 부모는 Layout 객체입니다. 그 부모는 중앙 위젯입니다. 그것의 부모는 UI 다.

창이 닫히면 모든 자식을 자동으로 정리합니다. 즉, 각각의 자식에 대해 삭제를 호출 할 필요가 없습니다.

가끔씩 예제는 힙에없는 것을 보여 주지만 다른 곳에서는 참조되지 않는 대화 상자와 같이 수명이 짧은 항목이 아니라면 큰 예제에서는 잘 작동하지 않습니다.

closeEvent()에서도 db에 대한 액세스를 정리해야합니다. 데이터베이스 예제를보고 핸들을 데이터베이스에 닫는 데 사용되는 코드 행을 찾으십시오.

정리 중이며 런타임에 사용할 수 없을 가능성이있는 경우 확인해야합니다.

if(label) 
    label->setText("I am closing now"); 

그리고 어떤 경우에는 포인터를 삭제하거나 닫은 후에 포인터를 0으로 설정할 수도 있습니다.

희망이 있습니다.

관련 문제