void value not ignored as it should be
-
OK ich habe mittlerweile mit GDB raus gefunden, das es wohl Zugriffsprobleme gibt bei manchen Bildern, warum weiß ich aber nicht.
Nun habe ich mal Valgrind installiert, aber ich habe nicht wirklich den Plan was ich damit machen kann.
Immerhin startet nun das Programm wenn es mit valgrind aufgerufen wird, aber das ist ja keine Lösung
Hier mal die Ausgabe: http://rafb.net/p/MH74yY52.html
Ich hoffe ihr könnt damit was anfangen, wie gesagt ich bin Python verwöhnt und dort gibt es ja Garbage Collectors, vielleicht ist das ja mein Problem...
-
OK ich habe noch einmal GDB benutzt und ich glaube ich weiß was passiert, ich greife wohl auf Indizes zu, die es nicht gibt.
Ich verstehe nur nicht wieso es passiert, denn es klappt bei manchen Bildern.Vielleicht findet ihr den Fehler... aber nichts desto trotz scheint valgrind mir massive Speicherprobleme zu zeigen, die ich wohl durch schlechte Pointerverwaltung hin bekomme

Ich poste nochmal den Code der diese Probleme verursacht:
CImg<imgType> EyeLocatorPriv::labelImage() { CImg<imgType> labels(width,height,1,1); labels.fill(0); stack<Position*> st; Position* pos = 0; int lab = 1; labelValues.clear(); for (int y=1; y<height-1; y++) { for (int x=1; x<width-1;x++) { if (redBinaryMask(x,y) == 0) continue; if (labels(x,y) > 0) continue; // push the position on the stack and assign label st.push(new Position(x,y)); labels(x,y) = lab; setLabelValue(lab); while (!st.empty()) { pos = st.top(); st.pop(); int i = pos->x; int j = pos->y; if ((redBinaryMask(i-1,j-1) == 255) && (labels(i-1,j-1) == 0)) { st.push(new Position(i-1,j-1)); labels(i-1,j-1) = lab; setLabelValue(lab); } if ((redBinaryMask(i-1,j) == 255) && (labels(i-1,j) == 0)) { st.push(new Position(i-1,j)); labels(i-1,j) = lab; setLabelValue(lab); } if ((redBinaryMask(i-1,j+1) == 255) && (labels(i-1,j+1) == 0)) { st.push(new Position(i-1,j+1)); labels(i-1,j+1) = lab; setLabelValue(lab); } if ((redBinaryMask(i,j-1) == 255) && (labels(i,j-1) == 0)) { st.push(new Position(i,j-1)); labels(i,j-1) = lab; setLabelValue(lab); } if ((redBinaryMask(i,j+1) == 255) && (labels(i,j+1) == 0)) { st.push(new Position(i,j+1)); labels(i,j+1) = lab; setLabelValue(lab); } if ((redBinaryMask(i+1,j-1) == 255) && (labels(i+1,j-1) == 0)) { st.push(new Position(i+1,j-1)); labels(i+1,j-1) = lab; setLabelValue(lab); } if ((redBinaryMask(i+1,j) == 255) && (labels(i+1,j) == 0)) { st.push(new Position(i+1,j)); labels(i+1,j) = lab; setLabelValue(lab); } if ((redBinaryMask(i+1,j+1) == 255) && (labels(i+1,j+1) == 0)) { st.push(new Position(i+1,j+1)); labels(i+1,j+1) = lab; setLabelValue(lab); } } // end while lab++; } } // remove components with less than 25 pixels for (map<int,int>::iterator it = labelValues.begin(); it != labelValues.end();) { if (it->second <= 25) labelValues.erase(it++); else ++it; } // update labels cimg_forXY(labels,x,y) { if (labelValues.find(labels(x,y)) == labelValues.end()) labels(x,y) = 0; } return labels; }Irgendwas scheint wohl schief zu laufen beim pushen auf den Stack, denn die for-Schleifen können definitiv nicht über das Ziel hinaus schießen...