mips-4.3 컴파일러 버그인가요?
아래에는 3개의 main이 있습니다.
잘실행되는 main은 변수 -> test -> test2
실행도중 Segmentation 오류 나는 main은 변수 -> test2
컴파일이 안되는 코드는 왜? 컴파일이 안되는지 이해가 안됩니다.
잘실행되는 코드 test2에서는 정상적으로 값을 넘기는데.
컴파일러 안되는 코드에서는 cannot convert 'char* (*)[2]' to 'char***' 이렇게 convert를 할수 없다고 나오내요.
혹시 원인 혹은 관련 내용에 대하여 조언을 주시면 감사 드리겠습니다.
static char _argv_data[][256] =
{
"test.out"
,"test"
};
static char* _argv[] = {_argv_data[0],_argv_data[1]};
static int _argc = 2;
void test(int argc, char *argv[]);
void test2(int *argc, char **argv[]);
void test(int argc, char *argv[])
{
test2(&argc,&argv);
}
void test2(int *argc, char **argv[])
{
printf("argv[0]=%s\n",(*argv)[0]);
printf("argv[1]=%s\n",(*argv)[1]);
}
#if 1
// 잘실행되는 코드
int main ()
{
test(_argc,_argv);
}
#endif
#if 0
// 컴파일 안되는 코드
int main ()
{
test2(&_argc,&_argv);
}
// test.cpp: In function 'int main(int, char**)':
// test.cpp:91: error: cannot convert 'char* (*)[2]' to 'char***' for argument '2' to 'void test2(int*, char***)
#endif
#if 0
// 실행도중 포인터 오류나는 코드
int main ()
{
test2(&_argc,(char***)&_argv);
}
//Core was generated by `./main_test.exe'.
//Program terminated with signal 11, Segmentation fault.
//#0 0x2af2bc8c in strlen () from /lib/libc.so.6
//(gdb) bt
//#0 0x2af2bc8c in strlen () from /lib/libc.so.6
//#1 0x2aef5ffc in vfprintf () from /lib/libc.so.6
//#2 0x2aefb5f8 in printf () from /lib/libc.so.6
//#3 0x0040105c in test2 ()
//#4 0x004010ec in main ()
//(gdb)
#endif
댓글 달기