이유C 배열 초기화
static char *opcode_str[] = { "DATA"
, "DATA_REQUEST_ACK"
, "ACK_TIMER_EXPIRED"
, "ACK_UNEXPECTED_SEQ"
, "ACK_AS_REQUESTED"
} ;
작동하지만
static char **opcode_str = { "DATA"
, "DATA_REQUEST_ACK"
, "ACK_TIMER_EXPIRED"
, "ACK_UNEXPECTED_SEQ"
, "ACK_AS_REQUESTED"
} ;
는 SEGV 실패 하는가?
두 번째 목록은 포인터의 다섯 요소 배열에 대한 메모리를 할당하지 않았기 때문에 생각합니다. 그러나 더 포괄적 인 설명이 필요합니다.
모두 최고,
Chris.
감사합니다. 왜 컴파일시 또는 포인터가 초기화 될 때 실패하지 않습니까? – fadedbee
@Chrisdew는 C의 의미 규칙을 위반하는 정의되지 않은 동작입니다. 위반하는 규칙은 * 스칼라의 이니셜 라이저는 단일 표현식이어야하며 선택적으로 중괄호로 묶어야합니다. * 여러 표현식은 중괄호로 묶여 있습니다. –
그게 다예요, 경고를 내 화면에서 바로 울리게하겠습니다. 도! 이제 char * 포인터를 "DATA"포인터의 값으로 설정하는 것을 볼 수 있습니다. "DATA"는 마치이 4/8 바이트가 포인터를 가지고있는 것처럼 평가되어 segfault가 발생했습니다. – fadedbee