调用getPixel时,变量会被重置

时间:2014-03-27 20:30:51

标签: objective-c xcode nsbitmapimagerep

嗯,标题非常明显。我已经彻底测试了这段代码,我发现代码在调用getPixel时会以某种方式重置“y”。你不应该想到,因为这个方法没有指针,但不知怎的,这就是正在发生的事情。如果我删除调用getPixel的代码行,代码就会完成,尽管显然没有任何用处。如果有人能弄清楚这里发生了什么,我会非常感激。 (getPixel在NSBitmapImageRep,FYI中)

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

1 个答案:

答案 0 :(得分:1)

thePixel是一个unsigned int,但是以unsigned long的形式传入。该函数可能会溢出整数并更改y。尝试将thePixel声明为unsigned long

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