2016-06-04 8 views
-3

이 같은 일부 C++ 코드를 작성했다 :처리되지 않은 예외입니다. 액세스 위반

#include <iostream> 
using namespace std; 
void swap(int *a, int *b) 
{ 
    int *c = NULL; 
    *c = *a; 
    *a = *b; 
    *b = *c; 
} 
int main() 
{ 
    int a, b; 
    cout << "a, b: "; 
    cin >> a; 
    cin >> b; 
    swap(&a, &b); 
    cout << a << b; 
    system("pause"); 
    return 0; 
} 

그러나 컴파일 할 때, 그것은 말했다 : "처리되지 않은 예외 ... 액세스 위반 읽고 ...". 내 코드에 어떤 문제가 있습니까?

+0

안녕하세요! StackOverflow에 오신 것을 환영합니다! 이것이 실제로 나쁘지는 않지만 항상 코드를 들여 쓰는 것이 좋습니다. 나는 너를 위해 이것을 잠깐 후에 할 것이다. 코드를 훨씬 쉽게 읽을 수있게 해 주므로 구조적인 실수를 쉽게 찾을 수 있습니다. –

+0

컴파일러는 들여 쓰기와 공백과 같은 것을 신경 쓰지 않지만 사람들은 그렇게합니다. 코드를 들여 쓰기하면 사람들이 코드를 읽고 이해하고 따라갈 수 있습니다. –

+1

이것이 의미하는 바를 생각해보십시오 : – juanchopanza

답변

7

swap 메서드가 현재 수행중인 NULL 포인터를 역 참조 할 수 없습니다. 다행히, 당신은 정말 포인터로 c 필요하지 않습니다 - 당신은 단지 임시 값 저장하기 위해 int 필요합니다

void swap(int *a, int *b) 
{ 
    int c = *a; /* Here */ 
    *a = *b; 
    *b = c; 
}