2012-04-09 4 views
0

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; 
+0

Wenn Sie etwas mehr Code hinzufügen können .. es wird großartig – vidit

+0

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. –

+0

@vidit Ich habe mehr Code hinzugefügt – user1313921

Antwort

0

Von dem, was ich verstehe, das untergeordnete Bild außerhalb des Bildes erstreckt? Ich kann Ihnen nicht sagen, die Lösung für Ihr Problem, aber ich kann Ihnen zwei allgemeine Ratschläge geben, wenn Sie mit wxWidgets arbeiten:

  • Stellen Sie Ihre Fragen in den wx-Benutzer-Mailingliste, haben sie eine hervorragende Unterstützung und es gibt eine große Chance, dass ein Core-Entwickler Ihre Frage beantworten wird.
  • Der Quellcode ist dein Freund. Der Code von wxWidgets ist wirklich sauber und gut strukturiert, leicht lesbar. Sie können also versuchen, mit einer Debug-Version von wxWidgets zu bauen und Ihre App unter einem Debugger laufen zu lassen, um zu sehen, was passiert. Wenn deine App den Debugger abstürzt, wirst du sehen, wo in dem wxWidgets-Code der Absturz ist und du siehst, was passiert.