Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problèmes avec des pointeurs ! ...

Sujet résolu
Anonyme
    23 novembre 2017 à 21:05:35

    Bonjour/Bonsoir,

    On me demande de faire un programme dans lequel à chaque fois je change soit la valeur de p, de q ou de i,et d'afficher leurs valeurs à chaque fois,le problème c'est qu'il s'arrête sans raison comme ça juste après les 3 premiers printf et je ne vois pas ou est l'erreur

    voilà mon programme :

    #include <stdio.h>
    int main()
    {
    	int i = 3,*p,*q;
    	
    	printf("&i = %d\n",&i);
    	printf("p  = %d\n",p);
    	printf("q  = %d\n",q);
    	
    	*p=i;
    	
    	printf("p = %d\n",p);
    	printf("*p = %d\n",*p);
    	printf("i = %d\n",i);
    	
    	*p=15;
    	
    	printf("p = %d\n",p);
    	printf("*p = %d\n",*p);
    	printf("i = %d\n",i);	
    	
    	i = 45;
    	
    	printf("p = %d\n",p);
    	printf("*p = %d\n",*p);
    	printf("i = %d\n",i); 
    	
    	p=&i;
    	
    	printf("p = %d\n",p);
    	printf("*p = %d\n",*p);
    	printf("i = %d\n",i);
    	
    	*p=2016;
    	
    	printf("p = %d\n",p);
    	printf("*p = %d\n",*p);
    	printf("i = %d\n",i);
    	
    	i = -34;
    	
    	printf("p = %d\n",p);
    	printf("*p = %d\n",*p);
    	printf("i = %d\n",i);
    	
    	q = p;
    		
    	printf("i = %d\n",i);
    	printf("*p = %d\n",*p);
    	printf("*q = %d\n",*q);
    	
    	printf("&i = %d\n",&i);
    	printf("p = %d\n",p);
    	printf("q = %d\n",q);
    	
    	
    	return 0;  
    } 
    
    

    Une solution ?

    • Partager sur Facebook
    • Partager sur Twitter
      23 novembre 2017 à 21:33:01

      Quand tu fais *p = i;

      aucune place mémoire n'a été réservée à l'endroit où pointe p, donc problème de gestion de la mémoire.

      • Partager sur Facebook
      • Partager sur Twitter
        23 novembre 2017 à 21:33:53

        La raison du plantage, c'est que tu utilises le pointeur p sans l'initialiser.

        Tu aura le même problème avec q.

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          26 novembre 2017 à 16:48:17

          Euh,que dois-je faire exactement ? Je viens de commencer en cours cette partie des pointeurs et j'avoue ne pas la maîtriser comme il  se doit,votre aide me serai vraiment bénéfique !
          • Partager sur Facebook
          • Partager sur Twitter
            26 novembre 2017 à 16:57:04

            Hello,

            Le mieux (c'est un peu sarcastique) est que p et q pointent vers un endoit qui permette de recevoir une valeur. Pour ce faire, l'utilisation de malloc() est à conseiller (posologie: une fois en début de programme, ne pas oublier le free() à la fin du traitement).

            Ainsi,

            #include <stdlib.h>
            
            int main(void) {
                int *p,*q;
            
                p=malloc(sizeof(*p));
                q=malloc(sizeof(*q));
            
                ....
            
                *p=....;
                ....
                *q=*p;
            
                ....
            
                free(q);
                free(p);
            
                return(0);
            }

            devrait résoudre le problème.

            -
            Edité par edgarjacobs 26 novembre 2017 à 17:01:44

            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

              26 novembre 2017 à 16:57:50

              Quand tu déclares

              int *p ;
              

              tu déclares un pointeur, mais pas la zone pointée. Pour le moment, il ne pointe sur rien. Donc si tu utilises *p, ça plante. Il y a deux possibilités :

              1° Utiliser une variable qui existe déjà et pointer dessus :

              int *p ;    // pour l'instant p ne pointe sur rien, donc *p n'existe pas
              int x = 0 ; // un entier quelconque...
              p = &x ;    // cette fois le pointeur pointe sur quelque chose ! (et *p vaut x)
              

              2° Allouer un emplacement pour la variable pointée en utilisant la fonction 'malloc'. Exemple :

                  int *p ;                // p pointe sur rien
                  p = malloc(sizeof *p) ; // p pointe sur la case mémoire créée
                  *p = 25 ;
                  printf("%d\n", *p) ;    // ça affiche bien 25
                  free(p) ;
              

              Il faut choisir l'une ou l'autre méthode en fonction de ce qu'on compte faire avec le pointeur.

              -
              Edité par robun 26 novembre 2017 à 17:00:13

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                27 novembre 2017 à 21:18:18

                Merci pour vos réponses,cela a résolu mon problème !
                • Partager sur Facebook
                • Partager sur Twitter

                Problèmes avec des pointeurs ! ...

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown