那麼,標題是不言自明的。我已經徹底地測試了這些代碼,並且我發現,當調用getPixel時,代碼以某種方式重置「y」。這不應該是可能的,你會想,因爲該方法不需要一個指針,但不知何故,這是發生了什麼。如果我刪除調用getPixel的代碼行,代碼將完成,但顯然沒有任何用處。如果有人能夠弄清楚這裏發生了什麼,我會非常感激。 (getPixel是NSBitmapImageRep,FYI)當getPixel被調用時變量被重置
NSInteger pixWide = theCAPTCHA.pixelsWide;
NSInteger pixHigh = theCAPTCHA.pixelsHigh;
for (NSInteger x = 0; x<pixWide;x++)
{
for (NSInteger y = 0; y<pixHigh;y++)
{
unsigned int thePixel[3];
[theCAPTCHA getPixel:(unsigned long *)thePixel atX:x y:y];
for (int i = 0; i<3; i++) {
theColors[i+(y*3)+(x*pixHigh)] = thePixel[i];
}
}
}
該像素是一個無符號整型,但以無符號長整型傳遞。該函數可能會溢出整數並更改y。嘗試將像素聲明爲unsigned long – Jack
謝謝!這工作!我不明白爲什麼y被影響。很明顯,我錯過了計算機科學的一些東西......是因爲溢出在y的價值上寫着嗎? –
是的,它假設它有64位的空間來寫,但實際上它只有32個。因此它將32位額外的位寫入內存中(這是巧合)以覆蓋y – Jack