`(size_t)(int * int)` will actually cast overflown integer to size_t, which isn't what was intended here. Correct thing would be to cast in the following manner `(size_t)int * int`. In this particular case can as well use function which is designed to allocate an array of memory without overflow.