No, problem je v tom, kde to pole deklarujes:
a) pokud mimo nejakou funkci, pak se (pri spusteni programu) vytvori v datovem segmentu, a melo by to fungovat vice-mene bezproblemu (pokud ma stroj hodne pameti)
b) pokud ale uvnitr nejake funkce (i treba main()), pak se vytvori na stacku, a rekl bych, ze 4M kus stacku ti asi nekdo tezko povoli.
Pro b) by teoreticky pomohlo klicove slovo static, kdy pak tu promennou alokuje taky v datech, a dostavas se do a).
Podle mne je nejlepsi, si nadeklarovat pouze pointer long *, a teprve za behu programu si pres malloc(sizeof(long)*1000000) toto pole naalokovat - takto urcite nebude problem (pokud ovsem nebezis na nejakem 8-bit nebo 16-bit :-) No a na konci programu (nebo kdyz uz to pole nepottrebujes), tak free().