Я пишу графический интерфейс, который в основном отображает разделы изображений пользователю и запрашивает ввод. Однако у меня есть странная проблема. Около 40% времени, когда я запускаю программу, я получу ошибку seg. Другие 60% времени он работает нормально, с тем же самым вводом. Благодаря в основном заявления печати мне удалось сузить ошибку сегм до этой линии:wxWidgets непредсказуемый Seg fault
subImage = image.GetSubImage(wxRect(wxPoint(0, iheight - 800), wxPoint(800, iheight)));
Я пытался объявить значения wxRect и wxPoint вне вызова GetSubImage, но это не сработало.
Это особый случай, когда подраздел изображения, который будет отображаться, находится за пределами края изображения. Этот конкретный случай просто является первым таким подразделением для отображения. Изображение - это изображение, загруженное из файла типа 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
Попробуйте сузить область использования отладчика (если возможно, GDB). Возможная причина - неинициализированный указатель. Проводка большего количества кода может помочь нам дать точные ответы. –
@vidit Я добавил еще код – user1313921