C++ pointeur

xman_genius Messages postés 97 Date d'inscription   Statut Membre Dernière intervention   -  
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   -
/*
ce petit programme sert a inverser une liste de nombre.
il n'y a pas de probleme de syntaxe, mais au cours de
l'execution un bug survient comme quoi la memoire ne
peut pas etre li apres l'excution de la premiere boucle.
merci d'avance de m'indiquer la source du porbleme*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int *p,*q,i,j;
for(i=0;i<10;i++)
scanf("%d\n",&p+i);
i=9,j=0;
do{
*(q+j)=*(p+i);
i--;
j++;
}while(i<=0 && 9<j);
for(i=0;i<10;i++)
printf("%d\n",*(q+i));
system("pause");
return 0;

}

3 réponses

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
*p et *q c'est des pointeurs, pas des tableaux, donc forcément si tu fais des *(q+j)=*(p+i);
Tu accédes à des zones memoires imprevues.

Et ici:
scanf("%d\n",&p+i); 

p c'est déjà une adresse. Donc &p c'est l'adresse de p (l'adresse d'un pointeur). Donc &p + i c'est quelque part ou personne ne veut aller sinon un voyageur en quête d'aventure....

Sans compter que p et q doivent pointer vers des variables existantes ou bien vers un espace qui doit être alloué.
0
xman_genius Messages postés 97 Date d'inscription   Statut Membre Dernière intervention   21
 
pour *(q+j)=*(p+i); *(q+j) et *(p+i) sont des contenus de memoire et pas des @memoire
alors que pour scanf("%d\n",&p+i); on peut le faire ca marche mais le compilateur ce plante a l'affectation donc au 2eme boucle
merci de ton aide ;)
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Si tu déclare un pointeur
int *q;

Tu ne pas juste après faire par exemple
*q=1;

Car q ne pointe sur rien pour l'instant. Tu peux le faire pointer vers une variable existante ou vers un espace memoire alloué.

*(q+j)=*(p+i); je suis d'accord ce sont des contenus memoires (enfin ça l'aurait été si q et p pointaient vers quelquechose de concret). Mais pour l'instant ils ne pointent sur rien.

q ne pointe sur rien. Donc q+9 ne pointe pas non plus dans un espace memoire valide (ou du moins pas celui que tu aurais voulu).
0