// 이전 소스와 동일하나 큰배열을 잡았을때의 단점을 극복하기위해
// 동적메모리 할당을 사용한 예제이다.
// 배열은 유용하나 지금같은 경우 100*100 사이즈를 max로 잡았기 때문에
// 언제나 40000 byte를 stack에 할당 받아야 하고
// 더 문제는 그보다 큰 골뱅이는 그릴수 없다.
// 그래도 강제로 그릴려고 100 이상을 입력하면
// 여러분은 화면에서 반갑지 않은 메모리 참조 error를 보게 될것이다. ^^
// 이때 사용자의 입력을 보고 그 만큼만 실행시에 할당할 필요가 있는데
// 그것이 동적 할당이다. C에서는 malloc - free쌍이다..
// 그리 어렵지 않은 문법이나 언제가 거부감 느껴지는 문법이다.
#include <stdio.h>
#include <stdlib.h>
main()
{
int *a,i,row=0,col=-1,num=0,max,count;
printf("input count:");
scanf("%d", &count);
max = count;
a = (int *)malloc(max*max*sizeof(int));
while(1) {
for(i=0; i<count; i++)
a[row*max + ++col] = ++num;
if(--count == 0) break;
for(i=0; i<count; i++)
a[++row*max + col] = ++num;
for(i=0; i<count; i++)
a[row*max + --col] = ++num;
if(--count == 0) break;
for(i=0; i<count; i++)
a[--row*max + col] = ++num;
}
for(i=0; i<max*max; i++) {
printf("%4d", a[i]);
if( (i+1)%max == 0)
printf("\n");
}
free(a);
}
댓글 없음:
댓글 쓰기