2012-02-26 8 views
2

は、これはコードです:セグメンテーションフォールト::負荷

void MainWindow::setPic(QString loc, int panel) 
{ 
    if(panel == 1) 
    { 
     loc1 = loc; 
     QPixmap pmap; 
     facedetect(loc1.toStdString(), 1, "CAND1.jpg"); 
     qDebug() << "Loading : " << loc1; 
     pmap.load(loc1); // I'm getting the segfault error in this line 
     qDebug() << "Loaded : " << loc1; 
     ui->PicView1->setPixmap(pmap); 
    } 

} 

どのように私はこのエラーを解決するだろうか?

私はUbuntu 12.04で最新のQt CreatorでQt 4.8を使用しています。

私は壁紙で試しましたが、クラッシュします。私は私の1x1のIDの写真でそれを試しました(クラウド...)、私は試験スケジュールのストリップ(別の画像から切り取ったもの)で試しましたが、ロードされましたが、QLabelPicView1は何も表示しません。

QPixmapをグローバル変数として宣言しようとしましたが、segfaultがあります。

+1

ヌルピックスマップを書き込むことはあまり意味がありません。投稿したコードが失敗する理由はありません。問題は別の場所にある可能性があります。あなたは 'loc'が本当に有効なQStringライブですと確信していますか? – Mat

+0

はい、Qt Creatorのデバッグビューには内容があることが保証されていました。 – Rek

+0

無効なパスであっても、QPixmapをクラッシュさせてはいけません。別のイメージファイルを試して、イメージの読み取りコードにバグではないことを確認してください。 –

答えて

0

が故に... 使用QPixmapのをロードする前に白であなたのイメージを埋めないでください:

QString loc; 
// fill loc with a path to your image file. 
QPixmap pmap; 
pmap.load(loc); 

は気をつけて、すべての画像タイプはQTで読み取ることができません。 QtImageReadingを参照すると、QTでサポートされているデータ型が表示されます。

+0

サポートされていないイメージタイプではセグメンテーションが発生しません。単に 'load'をfalseにするだけです。 (画像ファイルの_corrupted_画像ファイルが画像デコーダのバグを潜在的に発見する可能性があります) – Mat

+0

'loc1 = loc;'を試してから 'pmap.load(loc1);を使用してもsegfaultが得られます。イメージは '.jpeg '形式です。 – Rek

+0

あなたの画像は、gimp、eog、ms paintのような3番目の部分のソフトウェアで開くことができますか? rekが言ったように、おそらくあなたのイメージが壊れています。私はあなたの画像を送ってほしいですか?qpixmapで読み込もうとすることができます –