我正在编写一个 GUI,它基本上向用户显示图像的子部分并要求输入。但是,我遇到了一个奇怪的问题。当我运行程序时,大约有 40% 的时间会出现 seg 错误。其他 60% 的时间运行良好,输入完全相同。通过主要是打印语句,我设法将段错误缩小到这一行:
subImage = image.GetSubImage(wxRect(wxPoint(0, iheight - 800), wxPoint(800, iheight)));
我尝试在 GetSubImage 调用之外声明 wxRect 和 wxPoint 值,但这也不起作用。
这是要显示的图像的子部分不在图像边缘时的特殊情况。这种特殊情况恰好是要显示的第一个此类子部分。Image 是从 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;