Fonction renvoyant pointeur de structure [Résolu]

Fonction renvoyant pointeur de structure [Résolu] - C - Programmation

Marsh Posté le 16-02-2007 à 20:10:20    

Salut à tous, après un problème de programme qui plante j'ai récrit un programme simple qui m'a permit de générer la même erreur. J'ai crée une fonction qui renvoie un pointeur vers une structure. Cette fonction plante!
 
Par exemple en exécutant ce programme:
 

Code :
  1. #include <stdio.h>
  2. typedef struct{
  3.     int **pointeur;
  4.     int valeur;
  5. }t_struct;
  6. t_struct *renvoiePointeur()
  7. {
  8.     t_struct *p;
  9.     printf("A\n" );
  10.     p->valeur = 1;
  11.     printf("B\n" );
  12.     return p;
  13. }
  14. int main(int argc, char **argv)
  15. {
  16.     t_struct *data;
  17. data = renvoiePointeur();
  18. return 0;
  19. }


 
La console ne m'affiche que le caractère "A" et se bloque. Cela montre bien que c'est l'instruction p->valeur = 1; qui bloque le programme. Je ne comprend pas pourquoi le fait d'affecter 1 à variable fait planter le programme.
 
J'espère que quelqu'un pourra m'aider. Merci :jap:


Message édité par ngkreator le 17-02-2007 à 09:05:08
Reply

Marsh Posté le 16-02-2007 à 20:10:20   

Reply

Marsh Posté le 16-02-2007 à 20:19:40    

Tu n'alloues pas ta structures. Ton pointeur pointe vers une zone non-allouée. Ton compilateur aurait dû te donner un warning pour la ligne "p->valeur = 1" pour cause de non initialisation de ton pointeur.

Reply

Marsh Posté le 16-02-2007 à 20:25:32    

nyrk a écrit :

Tu n'alloues pas ta structures. Ton pointeur pointe vers une zone non-allouée. Ton compilateur aurait dû te donner un warning pour la ligne "p->valeur = 1" pour cause de non initialisation de ton pointeur.

Mais oui suis-je bète! :pfff:  Un grand merci nyrk! :jap:
 
Sinon le compilateur ne m'a donné aucun warning.
 
Si jamais des gars ayant eu le même problème tombent sur le topic voilà ce que j'ai modifié dans la fonction:
 
Avant

Code :
  1. t_struct *p


Après

Code :
  1. t_struct *p = malloc(sizeof(t_struct));


Message édité par ngkreator le 16-02-2007 à 20:35:17
Reply

Marsh Posté le 01-04-2013 à 20:51:20    

Merci Les gars.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed