2016-06-04 1 views
-3

je en train d'écrire un code C++ comme ceci:Exception non gérée. Violation d'accès

#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; 
} 

Mais lorsqu'il est compilé, il a dit: "Une exception non gérée ... la lecture de violation d'accès ...". Quel est le problème avec mon code?

+0

salut! Bienvenue à StackOverflow! Bien que ce ne soit pas vraiment mauvais, il est toujours recommandé d'indenter correctement votre code. Je vais le faire pour vous dans une seconde. Cela rend le code beaucoup plus facile à lire et facilite la recherche d'erreurs structurelles. –

+0

Le compilateur ne se soucie pas de choses comme l'indentation et les espaces, mais les gens le font. En mettant votre code en retrait, il est plus facile pour les utilisateurs de lire, de comprendre et de suivre votre code. –

+1

Pensez à ce que cela signifie: '* c = * a;' – juanchopanza

Répondre

7

Vous ne pouvez pas déréférencer un pointeur NULL comme le fait actuellement votre méthode swap. Heureusement, vous n'avez pas vraiment besoin c comme pointeur - vous avez juste besoin d'un int pour stocker la valeur temporaire:

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