поменял все int на _int64, стало работать
Вообще уже упомянутый тут тип size_t - это как раз то, что точно должно адресовать любой возможный на текущей платформе массив. Это его цель и роль, поэтому sizeof возвращает значение этого типа и потому это здесь то, что доктор прописал. Единственное - т.к. тип беззнаковый, то надо помнить это и не допускать ошибки вида while ( i >= 0 )...