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 -
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;
}
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;
}
A voir également:
- C++ pointeur
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Le pointeur de mon pc portable ne marche plus - Guide
- Pointeur laser publicitaire ✓ - Forum Loisirs / Divertissements
- Pointeur souris avec rond de chargement qui clignote sans arrêts ✓ - Forum Windows
3 réponses
*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:
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é.
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é.
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 ;)
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 ;)
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).
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).