0

好吧,标题是不言自明的。我已经彻底测试了这段代码,我发现代码在调用 getPixel 时会以某种方式重置“y”。你不应该这么想,因为该方法不需要指针,但不知何故,这就是正在发生的事情。如果我删除调用 getPixel 的代码行,代码就完成了,尽管显然没有产生任何有用的东西。如果有人能弄清楚这里发生了什么,我将不胜感激。(getPixel 在 NSBitmapImageRep 中,仅供参考)

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];
        }
    }
}
4

1 回答 1

1

thePixel是一个无符号整数,但作为无符号长传入。该函数可能会溢出您的整数并更改y. 尝试声明thePixelunsigned long

在内存中,变量只是一个接一个地排列。该函数getPixel:at:y:假定它在输入中有 64 位要写入,因为它需要一个unsigned long *. 但是,您自己的变量thePixel是一个unsigned int *并且写入unsigned long它会导致内存溢出

于 2014-03-27T20:59:55.530 回答