Бывают ограничения на локальные статические и вариабельные массивы. У меня на дроидах такие data-коллекции как раз где-то несколькими мегабайтами рабочей памяти и ограничены. То есть массив типа double (локальный или VLA-array) длиной в полтора миллиона уже не создать, так что всё совершенно верно - программа при этом крашится. И сделано это так специально!
Глобальных статических и любых динамических массивов это не касается, так что даже на телефоне можно работать с массивом целых чисел размером хоть сто миллионов если не больше, не говоря уж о хорошем PC. Просто пишешь, например, так:
cout << "n: "; cin >> n; int *A = new int [n];
и работаешь с этим массивом как тебе надо! А когда он перестанет быть нужным, просто отказываешься от этой памяти командой delete [] A;
Альтернатива массивов - векторы. С ними тоже нет никаких ограничений на используемую память объёмами порядка нескольких мегабайт. Это очень удобная коллекция данных, от занятия памяти которой тоже можно отказаться в любой момент, освободив её для чего-нибудь другого.
А проверять память на её выделение всё же лучше, чем не проверять, а то мало ли что...