嗯,标题非常明显。我已经彻底测试了这段代码,我发现代码在调用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];
}
}
}
答案 0 :(得分:1)
thePixel
是一个unsigned int,但是以unsigned long的形式传入。该函数可能会溢出整数并更改y
。尝试将thePixel
声明为unsigned long
在内存中,变量只是一个接一个地布局。函数getPixel:at:y:
假定它在输入中有64位要写入,因为它需要unsigned long *
。但是,您自己的变量thePixel
是unsigned int *
并向其写unsigned long
会导致内存溢出