이 코드가 유효 할까요?
글쓴이: loveme0721@gmail.com / 작성시간: 수, 2010/03/10 - 6:52오후
#include
void test(char **t)
{
printf("test t:0x%x [%s]\n", *t, *t);
*t = "redefine";
printf("test t:0x%x [%s]\n", *t, *t);
}
int main()
{
char *d = "define";
printf("main d:0x%x [%s]\n", d, d);
test(&d);
printf("main d:0x%x [%s]\n", d, d);
return 0;
}
runtime시에 test 함수에 재정의된 t가 test의 scope를 벗어나도 유효할까요?
제가 알기로는 stack에서 pop이 되기때문에 쓰레기 값으로 바뀔 수 있으니 그 값을 보장 할 수 없다인데요. 즉, t에 "redefine"라는 값은 나중에 어떤 쓰레깂에 의해 변경이 될 수 있다는게 맞지요?
Forums:
제가 알기로
char *d = "define";
*t = "redefine";
등의 문장에서 "define" 이나 "redefine" 의 문자열은 상수로 stack 과는 다른 메모리에 잡힙니다. BSS 이던가 그렇습니다.
그러므로 위의 코드는 잘 동작할 겁니다. 다만 "redefine" 등은 상수로 되어 있으므로 즉 read-only 라는 것입니다. 그러므로 "redefine" 을 "re__fine" 등으로 수정하는 것은 허용되지 않습니다.
요는 "redefine" 등은 stack 과는 별개의 것이라는 것입니다. test() 를 호출하면 stack 에는 d 의 포인터 값만 저장됩니다.
댓글 달기