세그멘테이션 오류입니다.. 도와주세요..
글쓴이: 익명 사용자 / 작성시간: 토, 2002/02/02 - 1:57오후
포인터 배우기 시작한 지 얼마 안되는 초보입니다.
제가 문자열 순서를 바꿀(역으로) 용도로 다음의
소스를 짰습니다.
컴파일은 이상없이 되는데
실행하면 세그멘테이션 오류가 뜹니다.
#include
#include
#include
char *inverse(char *x)
{
char *tmp, *result;
int i;
int j = 0;
tmp = (char *)malloc(strlen(x)+1);
for (i = strlen(x)-1; i >= 0; --i) {
*(tmp + j) = x[i];
++j;
}
*(tmp + j) = '\0';
strcpy(result, tmp);
free(tmp);
tmp = NULL;
return(result);
}
int main()
{
char *test = "Hello World!";
printf("%s -> %s \n",
test, inverse(test));
return(0);
}
기대했던 결과는,
Hello World! -> !dlroW olleH
였습니다.
부디 한 수 가르쳐 주십시오..
Forums:
Re: 세그멘테이션 오류입니다.. 도와주세요..
tmp를 result로 복사하지 말고 그냥 tmp를 return해 보세요.
이제야 잘되네요.. 근데..
뭐가 문제 였는지 알 수 있을까요?
답변 감사드립니다..
Re^3: 이제야 잘되네요.. 근데..
제가 알기로 strcpy()에서 문제가 생긴 겁니다. result 라는 포인터가 선언만 되었지 메모리가 할당된 건 아니니까요.
아마 strcpy()에서 tmp 영역을 복사하려고 하다가 메모리 공간이 없어서 segmentation fault가 생겼을 겁니다.
감사합니다. :) (냉무)
.
댓글 달기