int *a=500;
*a=3;
printf("%d",*a);
위의 코드를 참조하십시오.원하는 메모리 주소 오류 설정
메모리 500의 주소를 3으로 설정하고 싶습니다.하지만이 코드를 컴파일하면 오류가 발생합니다 (세그먼트 오류). 문제가 무엇입니까?
int *a=500;
*a=3;
printf("%d",*a);
위의 코드를 참조하십시오.원하는 메모리 주소 오류 설정
메모리 500의 주소를 3으로 설정하고 싶습니다.하지만이 코드를 컴파일하면 오류가 발생합니다 (세그먼트 오류). 문제가 무엇입니까?
은 당신이 OS에서이 작업을 실행하는 것을 의미한다. 주소 500에 쓰는 것은 프로세스 메모리 맵과 스택이 부족할 가능성이 큽니다.
다행스럽게도 메모리 보호 장치를 통해 원하는 곳을 쓸 수 없습니다.
이 잘못되었습니다
int *a=500;
당신은 포인터 변수에 임의의 주소를 할당하고 어디든 유용 가리키는 것으로 예상 할 수 없다. 특정 장치에 대해 잘 정의 된 주소를 가진 임베디드 플랫폼에서만 이와 같은 작업을 수행 할 수 있습니다.
당신 만 종료 변수의 주소 또는 malloc
같은 메모리 할당 함수에 의해 반환 주소 할당 할 수 있습니다 : 당신이 예외를 가지고 있기 때문에
int b;
int *a = &b; // valid
int *c = malloc(sizeof(int)); // valid
int *d = 500; // not valid
주소 500? 왜 500? 또한 "오류가 발생했습니다." "작동하지 않습니다"만큼 유용합니다. 오류 메시지를 추가하십시오. – tkausl
예를 들어 –
(예 : 500)으로 편집되었습니다. 메모리에 일부 장소를 설정하려고합니다. 왜 못 하겠어? –