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; }이런식의 구성도 가능하죠 ^^
---------------------------------------
세계는 넓고, 할일은 많다.
댓글 달기