을 먼저 사용합니다. 코드를 제공하지 않아서 변명의 여지가 있지만 오류가 임의로 발생하기 때문에 발췌 한 C + P는 어렵습니다.EXC_BAD_ACCESS GCC로 컴파일 할 때 Clang은
GCC로 C 소스를 컴파일 할 때 매우 이상한 오류가 발생합니다. Erlang 용 링크드 인 드라이버를 개발 중입니다. 오류의 원인을 이해하지 못합니다. 오류는 다음과 같이 나타납니다 :
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0xffffffffb012aae8
[Switching to process 7316 thread 0x1503]
ktqk_exec (query=0x13e0af00, table=0x13e00ea0) at ktqk.c:215
215 clock_t start = clock();
나는 Erlang 가상 머신을 GDB로 랩핑하여 메모리 섹션에 액세스 할 수 있습니다. 나에게, 높은 주소 0xffffffffb012aae8
는 매우 의심스럽게 보입니다. 그러나 Clang의 모든 기능은 예상대로 작동하지만 오류는 발생하지 않으며 segfault가 없습니다. 나는 조사를 시도했다 :
(gdb) p clock
$1 = {<text variable, no debug info>} 0x7fff85c29fd0 <clock>
(gdb) p start
$2 = 2954013712
그래서 분명히 가치는 초기화되지 않았고, 추락했다. 같은 파일에 중단 점을 설정하면 간단히 건너 뜁니다. 왜 모든 것이 Clang과 작동하지만 GCC에서는 작동하지 않습니까?
기본적으로 Clang은 C99와 GCC C89를 사용하기 때문에 GCC에서 컴파일을 위해 -std=c99
플래그를 포함해야했습니다. 잠재적 인 출처가 될 수 있습니까? 그러나 위 코드를 주석 처리하면 다음 함수 호출에서 실패합니다. 그래서 어떻게 든 함수 호출과 관련이있는 것 같습니다. 그럼에도 불구하고이 줄 앞에있는 모든 함수 호출은 문제가 없습니다.
매우 이상한 오류입니다. 아무도 아이디어가 있니? 이 오히려 퍼지 설명 미안 해요, 단순히 오류를 이해하지 오전.
모든 최선을, 마틴
너무 현지화되어있어 닫으려고합니다. 오류는 질문 자체의 텍스트와 완전히 관련이없는 것으로 밝혀졌으며 음의 배열 색인이었습니다. – unwind
그래,이 일은 끝내도 돼, 미안해. –