세그멘테이션 오류입니다.. 도와주세요..

익명 사용자의 이미지

포인터 배우기 시작한 지 얼마 안되는 초보입니다.

제가 문자열 순서를 바꿀(역으로) 용도로 다음의
소스를 짰습니다.
컴파일은 이상없이 되는데
실행하면 세그멘테이션 오류가 뜹니다.

#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
였습니다.

부디 한 수 가르쳐 주십시오..

익명 사용자의 이미지

tmp를 result로 복사하지 말고 그냥 tmp를 return해 보세요.

익명 사용자의 이미지

뭐가 문제 였는지 알 수 있을까요?

답변 감사드립니다..

익명 사용자의 이미지

제가 알기로 strcpy()에서 문제가 생긴 겁니다. result 라는 포인터가 선언만 되었지 메모리가 할당된 건 아니니까요.
아마 strcpy()에서 tmp 영역을 복사하려고 하다가 메모리 공간이 없어서 segmentation fault가 생겼을 겁니다.

익명 사용자의 이미지

.