무엇이 누락 되었습니까? 별도의 함수로 카운터를 증가 시키려면 세그먼트 오류가 발생하는 이유는 무엇입니까? 널 포인터를 역 참조세그먼트 오류, 포인터 값 증가
int point(int *cow);
int main()
{
int *cow = 0;
point(cow);
return(0);
}
int point(int *cow) {
(*cow)++;
return(0);
}
무엇이 누락 되었습니까? 별도의 함수로 카운터를 증가 시키려면 세그먼트 오류가 발생하는 이유는 무엇입니까? 널 포인터를 역 참조세그먼트 오류, 포인터 값 증가
int point(int *cow);
int main()
{
int *cow = 0;
point(cow);
return(0);
}
int point(int *cow) {
(*cow)++;
return(0);
}
는
어쩌면 당신이 대신하고 싶었다 C에서 동작이 정의되지 않습니다 :int a = 0;
int *cow = &a;
point(cow);
참고 임시 포인터 cow
이 필요하지 않다고과 직접 전달할 수 있습니다 &a
~ point
기능.
'point (& a)'는 아마도 충분했을 것입니다 ... –
다음과 같은 것이이 작업을 수행 할 수있는 좋은 방법 : 당신은 주에있는 포인터를 할 필요가 없습니다
void point (int *cow);
int main() {
int cow = 0; // Create a simple int, not a pointer
point (&cow); // Pass address (&) of your int
return 0;
}
void point (int *cow) {
(*cow)++;
}
, 당신의 증가 함수에 포인터를 전달합니다.
널 포인터를 참조 해제하려고 시도하고 있습니다. 널 포인터가 프로그램을 확실히 중단시킵니다. 당신은 아마이 할 의미 : 원래 코드에서
int point(int *cow);
int main()
{
int cow = 0;
point(&cow);
return(0);
}
int point(int *cow) {
(*cow)++;
return(0);
}
을, 당신은 포인터 - 투 - INT 생성 (예 : INT * 소),하지만 당신은 실제로 당신이 시도하는 값을 저장하는 int를 생성하지 증가. 다음은 위의 코드 변경 사항을 원래 코드와 결합한 올바른 예입니다.
행운을 빈다!
int *cow = 0;
은 "암소"를 정수에 대한 포인터로 선언 한 다음 그 포인터에 값 0을 할당합니다. 그런 다음 point()로 전달하여 "0"을 참조 해제 한 다음 해당 메모리 위치에 저장된 값을 증가시킵니다.
대신을 시도해보십시오
int x = 0;
int *cow = &x;
point(cow);
(정의 위키에서) (보통 세그 폴트 단축) 세그먼트 오류, 버스 오류 또는 액세스 위반이 일반적으로 CPU가 물리적으로 해결 할 수없는 메모리에 액세스하기위한 시도이다.
int *cow = 0;
프로그램이 메모리에 액세스하려고
는 유효한 주소하지 않기 때문에 당신이 분할 오류가 있습니다, 위 지적했다.
잠시 동안 C를 수행하지 않았지만 메모리 값을 0으로 정의하지 않고 포인터를 메모리에서 0 위치로 정의하지 않았습니까? –