2015-11-21 1 views
0

CASE 1:c erreur de segmentation pointeurs

#include <stdio.h> 
int main() 
{ 
int a = 5,*p; 
*p = &a; 
    printf("%d",*p); 
} 

le programme mentionné ci-dessus donne le problème de défaut de segmentation. mais dans le cas 2 cela fonctionne bien. CASE 2:

#include <stdio.h> 
int main() 
{ 
int a = 5,*p = &a; 
printf("%d",*p); 
} 

quelqu'un peut-il expliquer ce problème s'il vous plaît. Je vous remercie.

+0

ouais, tout tutoriel en langage C pour débutant pourrait expliquer le problème. Rechercher, lire; dictu horrible, pense. (Ceci est ** trivial. **) –

+0

Je vote pour clore cette question hors-sujet car Stack Overflow n'est pas un site de tutoriel pour débutants. –

+0

le type de 'p' est' int * '. Vous affectez 'p' dans le cas 1, pas' * p'. – wimh

Répondre

4
*p = &a; 

déréférences p et attribue &a à l'emplacement de mémoire ppointe vers. Le pointeur n'est pas initialisé, aussi le déréférencement donne-t-il un comportement non défini (donc l'erreur de segmentation).

int a = 5,*p = &a; 

a et p Définit, où l'astérisque n'indique pas déréférencement mais distingue une définition int habituelle à partir d'une définition de pointeur int*. La ligne est équivalente à

int a = 5; 
int* p = &a;