정말 이상한 결과
글쓴이: bigbaby / 작성시간: 목, 2010/01/07 - 11:19오후
멀티 쓰레드 프로그래밍에서
하나의 쓰레드에서 정적 라이브러리 함수를 호출해서 사용합니다.
특정 변수를 포인터로 전달하여 함수에서 출력하게 해놨는데
출력하다가 도중에 아무것도 출력하지 않습니다.
함수 호출 후에는 다시 정상적으로 출력됩니다.
문제는 변수로 읽기만 하고 전혀 건드린건 없다는 것입니다.
int funcA(char * a)
{
...
printf (" 1 a : \s\n", a); // 정상출력
.........
printf (" 2 a : \s\n", a); // 정상출력
........
printf (" 3 a : \s\n", a); // 아무것도 출력 안함
.......
printf (" 4 a : \s\n", a); // 아무것도 출력 안함
.....
}
대체 어떻게 이런 상황이 발생하는지 이해가 안가네요 ^^
혹시나 해서 전달인자를 const char * const a 라고도 줘봤는데..
결과는 동일하더군요..^^
Forums:
호출하는 놈 말고 다른 쓰레드에서 *a에 해당하는 내용을 변경했군요.
냉무무
흠...
다른 쓰레드에서 변경했는데도...값이 복구 될 수 있나요???
그리고, 전달되는 변수는 쓰레드의 로컬변수입니다.
라이브러리로 전달시에는 로컬 변수의 포인터를 전달했구요...
테스트 해보다가...
최적화 옵션 O2 -> O0으로 변경했더니 출력이 잘 되네요....
-_-;;
찝찝하네요;;;
댓글 달기