Переменная сбрасывается при вызове 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 к этому вызовет переполнение памяти

Другие вопросы по тегам