Probleme avec stucture [Résolu]

Signaler
Messages postés
34
Date d'inscription
samedi 17 juillet 2010
Statut
Membre
Dernière intervention
14 mai 2012
-
Messages postés
34
Date d'inscription
samedi 17 juillet 2010
Statut
Membre
Dernière intervention
14 mai 2012
-
bonjour, j'explique mon probleme.

J'utilise en ce moment spatstat pour mon memoire sur les processus ponctuels. Le probleme est qu'il se montre incapable de calculer rapidement ce que je lui demande vu la taille des processus generes. J'ai donc decide de programmer mes calculs en c.
Je souhaite pouvoir rentrer dans une structure contenant des float les coordonnees des points de mes processus. J'ai donc ecrit dans un fichier txt le nombre de points et dans un autre toutes mes coordonnees. Je recupere mon nombre de points
int taille=0;

    FILE* fichier=NULL;

    fichier = fopen("C:\\Documents and Settings\\Qui qui quoi dont ou\\Plocha\\Memoire\\nombreDePoints.txt","r");

    fscanf(fichier,"%d", &taille );

    printf("%d",taille);


jusque la pas de problemes. mais apres je cale. Je veux faire une structure
struct coordonnees
{
    float x;
    float y;
};


avec exactement le nombre dont j'ai besoin, c'est a dire taille, pour y rentrer mes coordonnees qui sont dans mon autre fichier txt. Est-ce qu'ecrire ca
struct coordonnees processus; // je cree une structure de type coordonnee qui s'appelle processus
    struct point* points= &processus; // je cree un pointeur sur ma structure processus

    points = (struct point*)malloc(20* sizeof(struct point*));

c'est correct???

Quand je rentre
printf("%p\n\n", points);


il me renvoie bien un adresse qui a priori est celle de la premiere case du premier tableau de float (je n'en suis vraiment pas sur...) mais apres, je ne sais pas comment parcourir mes deux tableaux, regarder ce qu'il y a dedans donc je ne peux pas y rentrer mes valeurs.
Pourriez-vous m'aider. Merci d'avance.

4 réponses

Messages postés
34
Date d'inscription
samedi 17 juillet 2010
Statut
Membre
Dernière intervention
14 mai 2012

Merci bien. Ca m'aura ete bien utile ce passage par le forum.
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Salut,

struct coordonnees processus; // je cree une structure de type coordonnee qui s'appelle processus
    struct point* points= &processus; // je cree un pointeur sur ma structure processus

    points = (struct point*)malloc(20* sizeof(struct point*));

Attention à ne pas confondre le nom de ta structure avec le nom de tes variables ! Sinon, ta variable processus ne sert à rien ici, ceci est largement suffisant :
struct coordonnees *points;

points = (struct coordonnees *)malloc(20 * sizeof(*points));


Pour afficher le contenu du tableau :
int i;

for (i = 0; i < 20; i++)
    printf("x: %f, y: %f\n", points[i].x, points[i].y);


Et on oublie surtout pas de libérer la mémoire quand on a plus besoin de la variable :)
free(points);


Bien entendu, je suppose que le nombre sera en réalité ta variable taille contenant le nombre de points à avoir, si ce n'était pas le cas, utiliser malloc n'aurait pas été recommandé.
Messages postés
34
Date d'inscription
samedi 17 juillet 2010
Statut
Membre
Dernière intervention
14 mai 2012

Merci pour cette reponse rapide.
J'ai ete bete, au depart ma structure s'appelait
 struct point
mais par clarte pour moi je l'avait transforme en
 struct coordonnees
et j'ai oublie de le changer dans les lignes d'apres.
Ici j'avais mis 20 a la place de taille pour tester.
Par contre je ne comprends pas vraiment pourquoi on ecrit
sizeof(*points)
donc un sizeof du pointeur et pas
sizeof(struct coordonnees)
sizeof de la structure.
malloc me renvoie un pointeur et me reserve la place demande. La structure veut deux float pour l'abcisse et l'ordonnee. Apparement c'est con de demander (taille*la taille de deux floats) mais je ne comprends pas pourquoi. Ou plutot je dois mal comprendre malloc sans doute.
En tout cas, ca a l'air de bien marche.
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Ici, sizeof(*points) et sizeof(struct coordonnees) sont identiques : points étant un pointeur vers une struct coordonnees, *points est une struct coordonnees. En général on préfère écrire le sizeof avec la variable plutot qu'avec le type en dur (meilleur lisibilité et si jamais plus tard tu change le type de ta variable, pas besoin de modifier le sizeof avec, ce qui peu t'éviter de jolis bugs causés par un oubli).