2016-06-04 2 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

Подумайте о том, что это означает: '* c = * a;' – juanchopanza

ответ

7

Вы не можете разыменовать указатель NULL как ваш метод swap. К счастью, вам не нужно c как указатель - вы просто нужно int хранить временное значение:

void swap(int *a, int *b) 
{ 
    int c = *a; /* Here */ 
    *a = *b; 
    *b = c; 
} 
Смежные вопросы