동적할당이 되어서 이미 일정한 숫자를 갖고 있는 메모리를 재할당하란다. 예를 들어, a 개 만큼의 메모리를 할당해 줬는데 b 개 만큼의 메모리를 더 할당하라는 얘기.
2차원 배열의 동적 할당을 써보기로 마음먹었다. 그러니까 예를 들면
arr[0][~] 의 배열에 일단 할당을 하고 데이터를 넣어 둔다. 일단 arr[1][~] 부분은 할당하지 말고 놀려 둔다. 그리고 원소를 추가할 때면 arr[1][~] 에다가 임시로 값을 복사하고, arr[0][~] 부분을 다시 할당한다. 그리고 arr[1][~] 에 보관된 값을 다시 복원한다. 그리고 arr[1][~] 부분만 free 를 이용하여 다시 풀어준다.
이렇게 하면 진짜 공간 절약할 수 있는지는 잘 모르겠다..... 일단 생각나는 방법이 이거 뿐이라 이렇게 하기로.
하고 나면 아래처럼 된다. 확인을 위해서 나는 그냥 1부터 값이 차례대로 올라가게 만들어 뒀다.
코드는 아래와 같다.
#include <stdio.h>
#include <stdlib.h>
int malloc_add(int **arr,int *a, int *b);
int main(int argc, char **argv)
{
int i;
int a,b;
int **arr;
printf("몇 개의 원소를 할당하겠습니까? : ");
scanf("%d", &a);
arr=(int **)malloc(sizeof(int *)*2);
arr[0]=(int *)malloc(sizeof(int)*a);
for(i=0;i<a;i++)
{
arr[0][i]=i+1;
}
printf("현재까지 할당된 메모리 개수는 5개 입니다. 할당된 값은 아래와 같습니다. \n");
for(i=0;i<a;i++)
{
printf("arr[0][%d] = %d \n", i, arr[0][i]);
}
printf("몇 개의 원소를 추가하겠습니까? : ");
scanf("%d", &b);
malloc_add(arr,&a, &b);
printf("바뀐 배열을 점검합니다. \n");
for(i=0;i<a+b;i++)
{
printf("arr[0][%d]= %d \n", i, arr[0][i]);
}
free(arr[0]);
free(arr);
return 0;
}
int malloc_add(int **arr,int *a, int *b)
{
int i;
arr[1]=(int *)malloc(sizeof(int)* *a);
for(i=0;i<*a;i++)
{
arr[1][i]=arr[0][i];
}
arr[0]=(int *)malloc(sizeof(int)*(*a+*b));
for(i=0;i<*a;i++)
{
arr[0][i]=arr[1][i];
}
for(i=0;i<*b;i++)
{
arr[0][*a+i]=*a+i+1;
}
free(arr[1]);
return 0;
}
C 언어 예제, 연결 리스트 연산, 데이터 자유자재로 추가 제거 (0) | 2015.01.08 |
---|---|
C 언어 예제, 메모리 동적 할당 + 구조체와 노드 다루기 (0) | 2015.01.05 |
C 언어 예제, 개미 수열 만들기 (0) | 2014.12.31 |
C 언어 예제, 100의 자리 큰수 계산기(구조체 이용) (스압) (0) | 2014.08.17 |
C 언어 예제, string 문자열 int 형으로 전환하기 (0) | 2014.06.28 |
댓글 영역