Rust reference 상태 : 원시 포인터 매달려/널을 역 참조 null 원시 포인터를 역 참조 해제하는 동작이 왜 발생합니까?
- :
- 안전하지 않은 블록과 안전하지 않은 함수 내에 포함한 모든 녹 코드에서 금지 행동의 목록입니다
이 질문은 전적으로 널 부분에 대해서. 주소 공간에 명확하지만 알 수없는 주소를 액세스 할 수 없도록 요구하는 고유 한 이유는 없습니다. 그게 내 논문입니다 (null 포인터의 대부분 구현이하는 것입니다). 그래서 it seems merely ancient C cruft 이후로 이러한 발자국에서는 왜 Rust를 따르고 있습니까?
내가 들어 여러 가지 이야기 (example는 another, another) (, 구현에 따라서 등)이 같은 포인터를 액세스 할 필요가 있었다, 그래서 왜 스펙을 허용 내 경력에 다시 길을 얻으려면?
어셈블리 출력과 많은 질문이 나오는 문맥이 in the C++ Reddit thread입니다. 그것도이 Rust Reddit thread에서 자랐습니다.
위에서 언급 한 많은 "전쟁 이야기"에도 불구하고 실제로 나를 괴롭히는 것은 그 영역이 아니라 추상적 인 것입니다. 하드웨어에서 제공되는 주소 공간 액세스를 언어의 명세는 모든 하드웨어/OS/아키텍처를 선험적으로 사용한다.
(심지어 C에서) 널 포인터는 값이 0 인 포인터 일 필요는 없습니다. 주소 0이 일부 플랫폼의 포인터에 유효한 값인 경우 널 포인터에 대해 다른 자리 표시자를 사용할 수 있습니다. – mcarton
@mcarton 질문을 올릴 때이 오해를 피하기 위해 열심히 노력하고, 누군가 실패 할 때마다 실패하기 때문에 실패합니다. 그리고 끝없는 토론은 널 포인터가 값 0이되지 않는 것으로 시작합니다. 미안하지만 질문은 그것에 관한 것이 아니라이 해석을 피하려고합니다. –
질문을 편집하여 "이전에 사용 된 모든 하드웨어/OS/아키텍처에 우선"을 추가했지만 이것이 바로 null 포인터의 요점입니다 : * 모든 하드웨어/OS/아키텍처에 선험적으로 설정되지 않았습니다 . 이는 하드웨어/OS/아키텍처에 대해 선험적으로 설정되지만 값은 해당 하드웨어/OS/아키텍처에서 참조를 해제하는 데 의미가없는 값일 수 있습니다. – mcarton