remalloc <== malloc + memcpy 를 사용하면 세그먼트 폴트 에
글쓴이: shean0 / 작성시간: 토, 2003/04/05 - 3:51오후
안녕하세요..이거 왜 이런지...원인이 .....
아주 간단한 프로그램 2개를 비교해 부탁드립니다. 하나는 malloc 이고, 하나는 remalloc를 이용한 것입니다...
stdlib 인클루드 했는데...왜..이런지... 모르겠네요..
아래 세그
이것이 세그먼트 폴트 에러가 나구요..
gcc -o M_exam1 M_exam1.c ; M_exam1
window에서두 정상으로 돌아가는데... 음.. 원인은 gcc 옵션에 있지 않을까 하는 생각이 들기두 하지만서두...
함 조언을 구합니다.
#include<stdio.h> #include<string.h> #include<stdlib.h> char *myremalloc( char *ptr,int len); int main() { char *buf; buf=(char *)myremalloc(buf,3+1); memcpy(buf,"123",3); buf[3]='\0'; printf("[%p][%s]\n",buf,buf); buf=(char *)myremalloc(buf,3+3+1); memcpy(&buf[3],"456",3); buf[6]='\0'; printf("[%p][%s]\n",buf,buf); free(buf); return 1; } char *myremalloc( char *ptr,int len) { char *value; value=(char *)realloc(ptr,len+1); return value; }
이것은 정상이구요..
#include<stdio.h> #include<string.h> #include<stdlib.h> char *myremalloc( char *ptr,int len); int main() { char *buf; buf=(char *)myremalloc(buf,3); memcpy(buf,"123",3); buf[3]='\0'; printf("[%p][%s]\n",buf,buf); buf=(char *)myremalloc(buf,3+3); memcpy(&buf[3],"456",3); buf[6]='\0'; printf("[%p][%s]\n",buf,buf); free(buf); return 1; } char *myremalloc( char *ptr,int len) { char *value=(char *)malloc(len+1); memcpy(value,ptr,len); free(ptr); ptr=NULL; return value; } [20d28][123] [20d38][123456]
Forums:
Re: remalloc <== malloc + memcpy 를 사용하면 세그먼트 폴
언제나 즐프를 꿈꾸며~
realloc의 man 페이지를 읽어보면 realloc은 ptr이 NUL
realloc의 man 페이지를 읽어보면 realloc은 ptr이 NULL일 경우 malloc과 같은 동작을 한다고 되어 있습니다. 위의 답변을 달아주신 분이 쓴것과 같이 포인터에 명시적으로 NULL을 지정해야만 realloc이 정상적으로 동작할 수 있겠죠... 아니면 realloc은 malloc에 의해 메모리가 할당된 포인터에 대해서 사용해야 합니다!!
댓글 달기