두 변수의 값을 바꿔 쓰려고 시도하는 동안 세그멘테이션 오류가 발생합니다. 내 코드는 다음과 같습니다C. 세분화 오류 포인터를 사용하여 두 값을 바꿔 쓰려고 시도합니다.
void swap(int *a,int *b){
int *temp;
*temp=*a;
*a=*b;
*b=*temp;
}
int main(){
int i=1,j=0;
printf("Before %d,%d\n",i,j);
swap(&i,&j);
printf("After %d,%d\n",i,j);
return 0;
}
내가 오류 다음 무엇입니까 :
나에게 신비 보이는 무엇Before 1,0
After 0,1
Segmentation fault (core dumped)
이 값이 성공적으로 교환 한 후 오류가 생산되고있다. 버그 란 무엇입니까? 어디에서나 포인터를 타입 변환해야합니까?
이 라인 : INT의 * 온도; 라 라 (la-la) 땅을 가리키는 포인터입니다. 코드는 다음을 수행합니다. * temp = * a; 결과는 일부 값이 '일부'알 수없는 위치에서 메모리를 밟았습니다. (아마도 프로그램의 주소 범위에있을 것입니다.) 나중에 메모리가 손상되면 seg 오류가 발생합니다 .3 xor 문을 사용하여 스왑을 수행하는 것이 훨씬 더 좋습니다. 임시 변수가 없으며 3 명령 만 사용하고 메모리 손상에 대한 걱정이 없습니다. – user3629249