#define을 하든 안하든 결과는
int array[atoi(argv[n])];
와 같은데요. 이렇게 하시면 안됩니다.
동적은 배열 생성은 당연히 malloc이나 new operator를 이용하셔야 됩니다.
이것은 스택 영역이 아닌 힙 영역에 메모리를 할당받고, 그 포인터를
되돌려 줍니다. 더군다나 생성할 배열 양이 무지하게 크다면 정적으로
생성하면 스택 영역이 넘쳐버리는 경우도 있습니다.
사용 예는 다음과 같습니다.
int *array = (int *)malloc(sizeof(int)*atoi(argv[2]));
array[0] = 1;
array[1] = 2;
... (배열 사용)
free(array); // 메모리 해제