Это может произойти, если ваш массив является локальным для функции. В этом случае вам потребуется размер стека, достаточный для хранения 2 ^ 24 дюймов (2 ^ 26 байт или 64 МБ).
Если вы сделаете массив глобальным, он должен работать. Я не уверен, как изменить размер стека в Windows; в Linux вы должны использовать «ulimit -s 10000» (единицы измерения - КБ).
Если у вас есть веская причина не использовать глобальный (параллелизм или рекурсию), вы можете использовать malloc / free. Важно либо увеличить свой стек (не очень хорошая идея, если вы используете потоки), либо получить данные в куче (malloc / free) или сегменте статических данных (global).
В идеале вы получите завершение программы (дамп ядра), а не зависание. Я делаю в Cygwin.