함수 인자에서 이중 포인터 문제
글쓴이: mips / 작성시간: 수, 2008/03/26 - 10:19오전
void func(char** str) { int i; for ( i = 0 ; i < 9 ; i++ ) printf("%s\n", str[i]); } int main(void) { int i, j; char str[10][10] = { "abc", "abc", "def", "asdfa", "badf", "badf", "badf", "badf"}; func(str); return 1; }
대충 위와 같은 코드가 있을 때, 컴파일을 하면, 타입이 맞지 않다고 워닝이 뜹니다. (실행했을 때는 segmentation fault가 납니다.)
char *str[10]; 으로 선언했을 때는 잘 되는데 배열값을 고정시키면 왜 안 될까요?
char **str 과 char str[10][10]이 어떻게 다른 거죠?
Forums:
배열 str[0] str[1]의
배열 str[0] str[1]의 주소값과 포인터 str, (str+1) 주소값이 어떻게 다른지 보시면 차이를 알 수 있을 것 같습니다.
아마도 전자는 10 + padding byte 정도의 주소값 차이가 날 것이고 후자는 포인터 사이즈인 4바이트 차이가 있겠죠. 그러니 오류가 날 수 밖에 없습니다.
어차피 main()에 포함된 지역변수라면 전역변수나 static한 전역 변수로 바꿔도 무방할 것 같네요.
댓글 달기