가능한 중복 접근 :세그먼트 오류 동안 메모리 영역을
: 리눅스 M/C에이 매우 작은 프로그램을
Invalid read/write sometimes creates segmentation fault and sometimes does not
내가 malloc에 몇 가지 실험을하고 있었다를 썼다
int main(){
int *p=NULL;
p = (int *)malloc(10);
*(p + 33*1000) = 5;
free(p);
return 0;
}
이 프로그램은 세그먼트 화 오류를주지 않지만 5 행을이로 변경하면* (p + 34 * 1000) = 5; 그런 다음 세그멘테이션 오류가 발생합니다. 내 시스템에서 페이지 크기는 4K입니다.
p 이후에 약 128Kb (34 * 1000은 약 128K)에서 분할 오류가 발생하는 이유를 설명 할 수 없습니다.
누군가가 리눅스에서 메모리 관리의 관점에서 이것을 설명 할 수 있다면 좋을 것입니다.
나는 의도적으로 내가 할당하지 않은 메모리 영역에 액세스하고 있는데, 내 질문은 p + 34 * 1000에 대한 세분화 오류를주는 이유와 p + 33 * 1000에 대한 오류를주지 않는 것입니다. – ankur
앞서 말했듯이 C 언어 표준을 따르지 않는 정의되지 않은 동작을 추론 할 수 없습니다. 앞으로는 p + 33000에 액세스 할 때 충돌이 발생할 수 있으며 * p * 33000에서 작동하는 것처럼 보입니다. –
읽어보기 : http://en.wikipedia.org/wiki/Undefined_behavior –