2017-11-28 18 views
-2
int *a=500; 
    *a=3; 
printf("%d",*a); 

위의 코드를 참조하십시오.원하는 메모리 주소 오류 설정

메모리 500의 주소를 3으로 설정하고 싶습니다.하지만이 코드를 컴파일하면 오류가 발생합니다 (세그먼트 오류). 문제가 무엇입니까?

+2

주소 500? 왜 500? 또한 "오류가 발생했습니다." "작동하지 않습니다"만큼 유용합니다. 오류 메시지를 추가하십시오. – tkausl

+0

예를 들어 –

+0

(예 : 500)으로 편집되었습니다. 메모리에 일부 장소를 설정하려고합니다. 왜 못 하겠어? –

답변

1

은 당신이 OS에서이 작업을 실행하는 것을 의미한다. 주소 500에 쓰는 것은 프로세스 메모리 맵과 스택이 부족할 가능성이 큽니다.

다행스럽게도 메모리 보호 장치를 통해 원하는 곳을 쓸 수 없습니다.

3

이 잘못되었습니다

int *a=500; 

당신은 포인터 변수에 임의의 주소를 할당하고 어디든 유용 가리키는 것으로 예상 할 수 없다. 특정 장치에 대해 잘 정의 된 주소를 가진 임베디드 플랫폼에서만 이와 같은 작업을 수행 할 수 있습니다.

당신 만 종료 변수의 주소 또는 malloc 같은 메모리 할당 함수에 의해 반환 주소 할당 할 수 있습니다 : 당신이 예외를 가지고 있기 때문에

int b; 
int *a = &b;     // valid 
int *c = malloc(sizeof(int)); // valid 
int *d = 500;     // not valid