2017-02-17 1 views
0

Je continue d'obtenir un message de faute de segmentation (core dumped) chaque fois que j'essaie d'exécuter ce programme C.erreur de segmentation dans ce programme de pointeurs dans C

#include <stdio.h> 

int main() 
{ 
    int i = 200, *p, *q, *r; 
    p,r = &i; 
    q = p; 
    *q = *p + 1; 
    printf("*p = %d\n", *p); 
    printf("*r = %d\n", *r); 
    return 0; 
} 

Il n'a pas de r s au début, mais je devais ajouter r s comme un alias à i puis ajoutez des instructions d'impression à la sortie des valeurs déréférencés de q et r.

+6

'p, r = & i;' que pensez-vous que cette ligne fait? –

+2

[Que fait l'opérateur de virgule, faire dans C?] (Http://stackoverflow.com/questions/52550/what-does-the-comma-operator-do-in-c) – Lundin

Répondre

1

Utilisez ceci:

p = &i; 
r = &i; 

au lieu de

p,r = &i; 

pointeur non initialisée est mauvais.

+0

'Un pointeur non initialisé est un comportement indéfini. 'Sans contexte approprié, c'est de la foutaise. Que diriez-vous de 'int * p; p = NULL; 'p' était unitalisé, n'est-ce pas? –

+0

en particulier un pointeur non initialisé n'est pas un comportement indéfini. Déréférencer un est. –

6

Dans votre code

p,r = &i; 

ne pas attribuer p, il laisse p non initialisée. Ensuite, au moment même où vous déréférenciez p (et q également, comme il a été affecté avec la valeur de p), vous cliquez sur undefined behavior, car vous supprimez la mémoire non valide.

Vous devez utiliser

p = r = &i; 

compiler votre code avec des avertissements appropriés activés et, avec votre code, vous devriez voir quelque chose de similaire à

avertissement: opØrande gauche d'expression par des virgules n'a pas d'effet [valeur -Wunused]

p,r = &i; 
^
0

//I write that as an answer because i still don't have 50 reputation

1: Je ne comprenais pas ce que vous voulez que le programme fera. l'utilisation de q et r est inutile.

2:p,r=&i; n'est pas une bonne commande. utilise p=r=&i ou p=&i; r=&i; ou p=&i; r=p;

+0

le second point n'est pas vrai 'p, r = & i;' est une commande valide, il ne fait rien avec p. Plus ce que vous avez dit est déjà couvert par sourav (une heure avant), donc vous n'ajoutez rien. –

+0

j'ai fixé ........ –

0

j'ai fait la correction dans votre code et il fonctionne très bien s'il vous plaît avoir examiner.

`#include <stdio.h> 

int main() 
{ 
    int i = 200, *p, *q, *r; 
    p = &i; 
    r = &i;  
    q = p; 
    *q = *p + 1; 
    printf("*p = %d\n", *p); 
    printf("*r = %d\n", *r); 
    return 0; 
}`