vercd7am
Messages postés34Date d'inscriptionsamedi 17 juillet 2010StatutMembreDernière intervention14 mai 2012
-
17 juil. 2010 à 17:51
vercd7am
Messages postés34Date d'inscriptionsamedi 17 juillet 2010StatutMembreDernière intervention14 mai 2012
-
17 juil. 2010 à 23:50
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.
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention 5 juin 201312 17 juil. 2010 à 18:36
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 :
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é.
vercd7am
Messages postés34Date d'inscriptionsamedi 17 juillet 2010StatutMembreDernière intervention14 mai 2012 17 juil. 2010 à 19:00
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.
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention 5 juin 201312 17 juil. 2010 à 19:40
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).