Ich schreibe eine GUI, die grundsätzlich Unterabschnitte von Bildern für den Benutzer anzeigt und nach Eingabe fragt. Ich habe jedoch ein seltsames Problem. Ungefähr 40% der Zeit, wenn ich das Programm starte, erhalte ich einen seg-Fehler. Die anderen 60% der Zeit läuft es gut, mit genau der gleichen Eingabe. Durch meist print-Anweisungen ich es geschafft, die seg Fehler zu verengen, um diese Zeile nach unten:wxWidgets unberechenbar Seg Fehler
subImage = image.GetSubImage(wxRect(wxPoint(0, iheight - 800), wxPoint(800, iheight)));
Ich habe versucht, außerhalb des GetSubImage Aufruf der wxRect und wxPoint Werte erklärt aber, dass entweder nicht funktioniert hat.
Dies ist ein Sonderfall, wenn der Teilbereich des Bildes, der angezeigt werden soll, außerhalb des Bildrands liegt. Dieser spezielle Fall ist zufällig der erste derartige Unterabschnitt, der angezeigt wird. Bild ist das Bild, das aus der Datei vom Typ wxImage geladen wurde. SubImage ist auch ein wxImage, das ich tatsächlich anzeigen kann.
Die Sache, die mich am meisten darüber verwirrt, ist, warum es nur manchmal passiert, wenn ich genau die gleiche Eingabe verwende. Jede Hilfe, selbst wenn Sie anfangen zu arbeiten, wird sehr geschätzt. Vielen Dank im Voraus
Der gesamte Code für meinen Konstruktor ist:
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;
Wenn Sie etwas mehr Code hinzufügen können .. es wird großartig – vidit
Versuchen Sie, mit einem Debugger (GDB wenn möglich) einzugrenzen. Ein möglicher Grund ist ein nicht initialisierter Zeiger. Durch die Bereitstellung von mehr Code können wir Ihnen genaue Antworten liefern. –
@vidit Ich habe mehr Code hinzugefügt – user1313921