1
我明白,stackoverflow異常通常是無限循環,但我已經檢查了我的邏輯並遍歷代碼,並且無法弄清楚。沒有無限循環,因爲我在處理它時用locationID
標記每個像素!爲什麼我得到一個stackoverflow異常(EMGU,openCV for C#,Visual Studio 2010 Express)
private void setAttachedPixels(ref Image<Gray, byte> source, int X, int Y, byte locationID) //recursively set a pixel, and all adjacent unmarked pixels, to a certain number
{
if (X >= 0 && Y >= 0 && X < source.Rows && Y < source.Cols)
{
if (source.Data[X, Y, 0] == 1) // 1 means unprocessed - locationID starts at 2 and increments elsewhere
{
source.Data[X, Y, 0] = locationID; //mark origin pixel
setAttachedPixels(ref source, X+1, Y-1, locationID); //down left pixel
setAttachedPixels(ref source, X+1, Y, locationID); //down
setAttachedPixels(ref source, X+1, Y+1, locationID); //down right
setAttachedPixels(ref source, X, Y - 1, locationID); //left
setAttachedPixels(ref source, X, Y + 1, locationID); //right
setAttachedPixels(ref source, X - 1, Y - 1, locationID);//up left
setAttachedPixels(ref source, X - 1, Y, locationID); //up
setAttachedPixels(ref source, X - 1, Y + 1, locationID); //up right
}
}
return;
}
代碼解釋:我通過圖像(基本上是2維數組),在它的一些斑點,並試圖循環「算」有多少像素每個斑的一部分。希望你能看到我在做什麼。
下面是錯誤的截圖。它和堆棧跟蹤沒有任何幫助,但我知道有人會問。
FYI:你不應該使用'ref'供大家參考類型參數。看[這個問題](http://stackoverflow.com/questions/21297071)。 –
遞歸不一定是無限的,會導致堆棧溢出,它必須足夠深以至於堆棧指針超出堆棧邊界。 – Nacimota