2016-09-30 31 views
-1

私の最初のQtプログラムの1つを作成しています。私はこれをログインフォームに入れて、次に提供されたユーザー名とパスワードがMYSQLデータベースにチェックされるようになります。このユーザー名とパスワードを持つレコードがある場合 、実行中に、いくつかの終了時にQtプログラムがクラッシュする

ui->something->hide(); 

は特別なQtのコンソール出力はありません行っているが、私はプログラムがクラッシュは「×」ボタンでそれを閉じたとき。

デバッグモードで実行しました。それが動作し システムからの信号を受信したため

は「劣ったが停止 信号名::。SIGSEGVシグナルの意味:何が起こっているのかセグメンテーションフォールト

+1

スタックフレームを調べようとします。 gdbで – Trevir

+1

ここにコードを投稿できますか? – PRIME

+1

このアセンブリを見るだけで何が問題なのかわからない場合は、コンピュータを捨ててプログラミングをやめてください。D – dtech

答えて

0

おそらくあなたが持っているということです私が得たもの スコープの外に起こっているオブジェクト。

何かが削除された、またはアクセスできなくなり、その後、あなたがこれを取得します、あなたがそれにアクセスしよう。

2つの処置:

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"); 

また、ポインタを削除または閉じた後にポインタをゼロに設定したい場合があります。

希望に役立ちます。

関連する問題