Hallo Experten,
folgender Code verhält sich unerwartet:[highlight=c#]private void DoSth()
{
if (m_DispIn.Image == 0) return;
if (!Cvb.Image.IsImage(m_DispIn.Image)) return;
if (m_iCurrentPrdNr < 0) return;
m_DispIn.RemoveAllOverlays();
Point ptUL, ptLR;
ptUL = m_prdNew.ccFoil[m_iCurrentPrdNr % 4].ptPatternUL; // Markierte Zeile
ptLR = m_prdNew.ccFoil[m_iCurrentPrdNr % 4].ptPatternLR;
DoSthCoolWith(m_DispIn, m_iCurrentPrdNr);
}[/highlight]Das heißt, bis zur markierten Zeile läuft wie gewohnt. Die Berechnung in der eckigen Klammer ist aber falsch. Statt "%" müsste es "/" heißen. Das Feld "ccFoil" ist lediglich 2 Elemente groß. "m_iCurrentPrdNr" kann aber bis zu 7 werden.
Nun kann das Ergebnis in der Klammer Werte 0..3 annehmen. Korrekt für das Feld ccFoil wären aber nur Werte 0..1. Ein Wert von 2 an dieser Stelle führt aber nicht zur Erwarteten OutOfRangeException, sondern tut nichts und verlässt die Funktion.
Der unzulässige Wert führt also dazu, dass die markierte Zeile sich wie eine return verhält.
Für die Fehlersuche ist dieses Verhalten ausgesprochen hinderlich.
Es tritt sowohl unter VisualStudio2005Express als auch unter VisualStudio2008Standard auf.
Ist dieses Verhalten bekannt?
Welche Auslöser kann es haben?
Mit freundlichem Gruß
luker
folgender Code verhält sich unerwartet:[highlight=c#]private void DoSth()
{
if (m_DispIn.Image == 0) return;
if (!Cvb.Image.IsImage(m_DispIn.Image)) return;
if (m_iCurrentPrdNr < 0) return;
m_DispIn.RemoveAllOverlays();
Point ptUL, ptLR;
ptUL = m_prdNew.ccFoil[m_iCurrentPrdNr % 4].ptPatternUL; // Markierte Zeile
ptLR = m_prdNew.ccFoil[m_iCurrentPrdNr % 4].ptPatternLR;
DoSthCoolWith(m_DispIn, m_iCurrentPrdNr);
}[/highlight]Das heißt, bis zur markierten Zeile läuft wie gewohnt. Die Berechnung in der eckigen Klammer ist aber falsch. Statt "%" müsste es "/" heißen. Das Feld "ccFoil" ist lediglich 2 Elemente groß. "m_iCurrentPrdNr" kann aber bis zu 7 werden.
Nun kann das Ergebnis in der Klammer Werte 0..3 annehmen. Korrekt für das Feld ccFoil wären aber nur Werte 0..1. Ein Wert von 2 an dieser Stelle führt aber nicht zur Erwarteten OutOfRangeException, sondern tut nichts und verlässt die Funktion.
Der unzulässige Wert führt also dazu, dass die markierte Zeile sich wie eine return verhält.
Für die Fehlersuche ist dieses Verhalten ausgesprochen hinderlich.
Es tritt sowohl unter VisualStudio2005Express als auch unter VisualStudio2008Standard auf.
Ist dieses Verhalten bekannt?
Welche Auslöser kann es haben?
Mit freundlichem Gruß
luker
Comment