2017-02-08 12 views
1

큰 버그의 문제점을 간단하게 축소했습니다.포인터에 값을 할당하면 하드 폴이 발생합니다

uint8_t *vald; 
*vald=46; 

이 코드 이행 연구 내 플랫폼에서 하드 오류로 연결 (아트멜 스튜디오, GCC) 내가 잘못하고있는 중이 야 무엇

?

+2

메모리를 할당하지 않았습니다. – Anty

+3

"값을 포인터에 할당"하지 않았습니다. 포인터가 가리키는 * uint8_t 위치에 * 값을 할당하려고합니다. 그러나 실제로는 아무 것도 가리키고 있지 않습니다. 포인터가 초기화되지 않았습니다. – AnT

답변

1

vald가 초기화되지 않았습니다. 이는 컴파일러가 로컬 변수에 대한 스택 프레임을 지우는 지 여부에 따라 0 또는 정의되지 않음을 의미합니다. 주소 0에 쓰기는 항상 오류이며 정의되지 않은 주소에 쓰는 것은 거의 항상 오류입니다.

*((uint8_t*)0) = 46;