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;
如果你可以添加更多的代碼..這將是偉大的 – vidit 2012-04-10 09:55:19
嘗試縮小使用調試器(如果可能的話GDB)。一個可能的原因是未初始化的指針。發佈更多的代碼可以幫助我們提供準確的答案。 – 2012-04-11 11:37:18
@vidit我添加了更多的代碼 – user1313921 2012-04-11 21:04:55