rLog와 코드 기반을 통합하기 위해 노력하고 있습니다. 리눅스에없는 Windows에서 문제가 발생했습니다. 헤더 파일에서 내가 나에게 "자세한"로깅 채널 (하나 기본적으로 디버그에서 최대)를 제공하는 정적 변수를 가지고 thusly 히 정의 :new는 윈도우에서 정적 전역 변수를 초기화 할 때 NULL을 반환합니까?
static RLogChannel *rlog_verbose = DEF_CHANNEL("verbose", Log_Debug);
가 리눅스에이 아무 문제 없지만 Windows에서 나는 얻을 응용 프로그램이 시작 되 자마자 오류가 발생합니다.
나는 RLOG 라이브러리에이 라인을 아래로 추적 한:
RLogChannel *rlog::GetComponentChannel(const char *component, const char* path, LogLevel levl) {
...
if(!gRootChannel)
gRootChannel = new RLogChannel("", level);
...
}
문제는 새로운 호출이 체크 하고 때 프로그램이 신속하게 충돌을가는 NULL 포인터를 반환하는 것입니다 액세스되었습니다. Windows에서 전역 컨텍스트에 메모리를 할당하는 것과 관련된 규칙이 있습니까?
편집 : 저는 이것이 정적 객체의 초기화 순서와 관련된 것이 분명하다고 확신합니다. 나는 분명히 뭔가를 잃어 버리지 않았 음을 확신하고 싶었다 : Windows에서의 메모리 할당. 모두에게 감사드립니다!
'new'은 null을 반환 할 수 없습니다. 예외가 발생 했습니까? – GManNickG
코드가 실제로 실행되었는지 또는 gRootChannel이 다른 곳의 NULL인지 확인 했습니까? – Fionn
두 코드 간의 연결은 무엇입니까? 첫 번째 변수 이름은'rlog_verbose'이며, 두 번째 변수 이름은'gRootChannel'입니다. 연결이 뭐야? 있어요? – AnT