Risolto. in pratica l'array lo devo dichiarare con il puntatore.

long* a = new long[DIM];

Vabbè sfuma la mia idea di vedere le differenze tra programmi con puntatori e quelli senza.