realloc에 대한 질문입니다.
글쓴이: wkaxld / 작성시간: 토, 2004/02/21 - 9:09오전
아래 코드는 일예로 간결화 시켜놓은겁니다. 내용은 보시는 바와 같이 간단히 함수 realloc_test가 메모리 블락 두개 a, b를 받은 후 크기를 재 조정한 후 값을 대입 합니다. 물론 realloc_test함수 안에서는 잘 작동합니다만, main함수로 돌아오면 대입된 값들이며, 물론 선두 번지들까지 realloc_test안과는 다르게 나옵니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 5
int realloc_test(int *,int *,int);
int main()
{
int i;
int n;
int *a,*b;
n=1;
a=(int *)malloc(sizeof(int)*n);
b=(int *)malloc(sizeof(int)*n);
realloc_test(a,b,n);
for(i=0;i<N;i++){ printf("a[%d]=%d b[%d]=%d\n",i,a[i],i,b[i]);}
printf("Freeing memory block\n");
free(a);
free(b);
printf("Complete!!\n");
return(1);
}
int realloc_test(int *a,int *b,int n)
{
int i;
int *new_a,*new_b,*old_a,*old_b;
new_a=(int *)realloc(a,sizeof(int)*N);
new_b=(int *)realloc(b,sizeof(int)*N);
a=new_a; b=new_b;
for(i=0;i<N;i++){
a[i]=i+2; b[i]=i+N+2;
printf("===In func.: a[%d]=%d b[%d]=%d\n",i,a[i],i,b[i]);
}
printf("\n");
return(1);
}
위의 예제에서 b를 넘기지 않는경우는 예상대로 작동이 됩니다. 메모리 블락을 하나만 넘기는게 특별한 경우인가요?
Forums:


Re: realloc에 대한 질문입니다.
이 함수를 int realloc_test(int **, int **, int)로 하셔야 할 듯 합니다.
네 갈길을 가라! 남이야 뭐라든!
답변 감사 드립니다.
답변 감사 드립니다.
잠온다~!
[code:1]#include <stdio.h>#inclu
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 5 int *realloc_test(int *, char , int , int ); int main() { int i, *a, *b; a = (int *) malloc(sizeof(int)); b = (int *) malloc(sizeof(int)); a = (int *) realloc_test(a, 'a', N, 1); b = (int *) realloc_test(b, 'b', N, 5); for (i = 0; i < N; i++) printf("a[%d] = %d b[%d] = %d\n",i, a[i], i, b[i]); printf("\nFreeing memory block\n"); free(a); free(b); printf("Complete!!\n"); return 1; } int *realloc_test(int *p, char ch, int n, int r) { int i; p = (int *) realloc(p, sizeof(int) * n); for (i = 0; i < n; i++) { p[i] = i + r + 2; printf(" > %c\t %c[%d] = %d\n", ch, ch, i, p[i]); } printf("\n"); return p; }이런식의 구성도 가능하죠 ^^
---------------------------------------
세계는 넓고, 할일은 많다.
댓글 달기