Structures - prob d'execution !!
Résolu
onzepattes
-
onzepattes -
onzepattes -
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
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
-
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 avecpoint->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 ...