Structures - prob d'execution !!

Résolu/Fermé
onzepattes - 2 déc. 2013 à 22:48
 onzepattes - 3 déc. 2013 à 15:05
Bonjour,

j'ai comme programme :

#include<stdio.h>

typedef struct Point Point;
struct Point {
float x;
float y;
};

int main() {
Point *point;
point->x = 0.0;
point->y = 0.0;
printf("%f", point->x);
return 0;
}

je le compile avec gcc (sous debian), ca se compile sans erreur, mais quand j'execute (./a.out) ca me donne l'erreur : commande interrompue

Je sais pas d'ou vient l'erreur !!
Merci d'avance

1 réponse

Utilisateur anonyme
3 déc. 2013 à 08:28
Bonjour

Point *point; 
Avec ça, tu définis un pointeur sur une structure, c'est à dire une variable qui contient l'adresse d'une structure. Mais tu n'as pas défini de variable structure, donc ton pointeur pointe n'importe où dans la mémoire. Dès que tu essayes de t'en servir avec
point->x = 0.0;
, tu vas taper n'importe où dans la mémoire et le programme plante.
Il FAUT réserver la mémoire correspondant à la structure, soit en définissant un variable Point (sans *) et en faisant pointer ton pointeur sur cette variable, soit avec un malloc :
...
int main() { 
  Point *point;
  Point p;    // on crée une variable de type Point
  point = &p; // on fait pointer point sur p
  point->x = 0.0;   // ou p.x=0.0; ce serait la même chose
...
</code c>
ou bien 
<code>int main() { 
  Point *point;
  point = (Point *) malloc(sizeof(Point)); // on alloue de la mémoire pour un Point
  point->x = 0.0; 
...               // sans oublier à la fin :
  free(point);    // on désalloue la mémoire
...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
3 déc. 2013 à 09:19
Ou bien, une variante sans pointeur
int main(void) {
     Point point;
     point.x=0;
     ...
}
0
merci bcp les amis. probleme resolu. merci encore.
0
merci bcp les amis. probleme resolu
0