Переменная сбрасывается при вызове getPixel
Ну, название довольно очевидно. Я тщательно проверил этот код, и я обнаружил, что этот код каким-то образом сбрасывает "y" при вызове getPixel. Это не должно быть возможным, как вы думаете, потому что метод не берет указатель, но каким-то образом это то, что происходит. Если я удаляю строку кода, которая вызывает 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 ответ
thePixel
является неподписанным int, но передается как unsigned long. Функция может быть переполнена вашим целым числом и изменена y
, Попробуйте объявить thePixel
как unsigned long
В памяти переменные просто располагаются одна за другой. Функция getPixel:at:y:
предполагает, что он имеет 64 бита для записи во входных данных, потому что он требует unsigned long *
, Однако ваша собственная переменная thePixel
является unsigned int *
и писать unsigned long
к этому вызовет переполнение памяти