2012-04-09 83 views
0

我正在寫一個基本上向用戶顯示圖像子部分並要求輸入的GUI。但是,我有一個奇怪的問題。當我運行該程序時,大約有40%的時間會出現seg故障。其他60%的時間運行良好,輸入完全相同。 通過我設法縮小賽格故障降到此行主要是打印語句:wxWidgets不可預知Seg故障

subImage = image.GetSubImage(wxRect(wxPoint(0, iheight - 800), wxPoint(800, iheight))); 

我已經試過宣佈GetSubImage呼叫外的wxRect和wxPoint值,但也不能工作。

這是一個特殊情況,用於何時要顯示的圖像的子部分離開圖像的邊緣。這種特殊情況恰好是第一個要顯示的分部。圖像是從類型爲wxImage的文件加載的圖像。 subImage也是我實際顯示的wxImage。

最讓我困惑的就是爲什麼它只在某些時候發生,當我使用完全相同的輸入。 任何幫助,甚至在哪裏開始工作,不勝感激。在此先感謝

我的構造完整的代碼是:

wxImagePanel::wxImagePanel(wxPanel* parent, wxString file, wxBitmapType format, int xloc, int yloc, int index, wxImage temp) : wxPanel(parent) 
{ 
image = temp; 
x = xloc; 
y = yloc; 
dIndex = index; 
int iheight = image.GetHeight(); 
int iwidth = image.GetWidth(); 

if(x - 400 < 0) 
{ 
    if(y - 400 < 0) 
    { 
     subImage = image.GetSubImage(wxRect(wxPoint(0,0), wxPoint(800,800))); 
    } 
    else if(y + 400 > iheight) 
    { 
     //here's the random seg fault 
     subImage = image.GetSubImage(wxRect(wxPoint(0, iheight - 800), wxPoint(800, iheight))); 
    } 
    else 
    { 

     subImage = image.GetSubImage(wxRect(wxPoint(0,y-400), wxPoint(800, y+400))); 
    } 
} 
else if (y - 400 < 0) 
{ 
    if(x + 400 > iwidth) 
    { 
     subImage = image.GetSubImage(wxRect(wxPoint(iwidth - 800, 0), wxPoint(iwidth, 800))); 
    } 
    else 
    { 
     subImage = image.GetSubImage(wxRect(wxPoint(x-400,0),wxPoint(x+400,800))); 
    } 
} 
else if((x + 400 < iwidth) && (y + 400 < iheight)) 
{ 
    subImage = image.GetSubImage(wxRect(wxPoint(x-400,y-400),wxPoint(x+400,y+400))); 
} 
else if(x + 400 > iwidth) 
{ 
    if(y + 400 > iheight) 
    { 
     subImage = image.GetSubImage(wxRect(wxPoint(iwidth - 800, iheight - 800), wxPoint(iwidth, iheight))); 
    } 
    else 
    { 
     subImage = image.GetSubImage(wxRect(wxPoint(iwidth - 800, y-400), wxPoint(iwidth,y + 400))); 
    } 
} 
else 
{ 
    subImage = image.GetSubImage(wxRect(wxPoint(x - 400, iheight - 800),wxPoint(x + 400,iheight))); 
} 
w = -1; 
h = -1; 
+0

如果你可以添加更多的代碼..這將是偉大的 – vidit 2012-04-10 09:55:19

+0

嘗試縮小使用調試器(如果可能的話GDB)。一個可能的原因是未初始化的指針。發佈更多的代碼可以幫助我們提供準確的答案。 – 2012-04-11 11:37:18

+0

@vidit我添加了更多的代碼 – user1313921 2012-04-11 21:04:55

回答

0

據我所知子圖像跨越圖像之外? 我不能告訴你解決你的具體問題,但是當你與wxWidgets的工作,我可以給你兩個一般建議:

  • 提出您的WX用戶郵件列表的問題,他們有很好的支持,並有核心開發人員很有可能會回答你的問題。
  • 源代碼是你的朋友。 wxWidgets的代碼非常乾淨,結構合理,易於閱讀。因此,您可以嘗試使用調試版本的wxWidgets進行構建,然後在調試器下運行您的應用程序以查看發生了什麼。當你的應用程序崩潰udner調試器時,你會看到wxWidgets代碼中的崩潰,你可以看到發生了什麼。