상세 컨텐츠

본문 제목

C 언어 예제, 동적 할당된 메모리 갯수 바꾸기

컴퓨터 관련/C 언어 예제

by 열정과 함께 2015. 1. 4. 04:57

본문

동적할당이 되어서 이미 일정한 숫자를 갖고 있는 메모리를 재할당하란다. 예를 들어, 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;

}






관련글 더보기

댓글 영역