tableau de pointeur sur une structure ?
SAlut à tous,
J'utilise depuis plusieurs mois un code en 32 bits, (qui marchait) et en passant en 64 bits, voici que soudainement il me fait des erreurs de segmentation jamais rencontrées.
Le genre d'erreur est celui-ci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include <stdio.h>
#include <stdlib.h>
int main()
{
struct COORD {
double centre[4];
double size[4];
} ;
struct All_variables {
struct COORD *eco;
};
struct COORD *eco;
eco = (struct COORD *) malloc((10)*sizeof(struct COORD));
struct All_variables *E;
E->eco[0].size[1]=0.3;
fprintf(stderr,"ecosize=%e \n", E->eco[0].size[1]);
return 0;
} |
J'ai une erreur de segmentation à la ligne 'E->eco[0].size[1]=0.3;' comment appeler ce chiffre ?
Merci de votre aide,
L.
correction de mon message
Bonjour,
désolée des coquilles....
Si je veux coder cela :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include <stdio.h>
#include <stdlib.h>
int main()
{
struct COORD {
double centre[4];
double size[4];
} ;
struct All_variables {
struct COORD* eco;
};
struct All_variables *E;
E->eco= (struct COORD *) malloc((10)*sizeof(struct COORD));
E->eco[0].size[1]=0.3;
fprintf(stderr,"ecosize=%e \n", E->eco[0].size[1]);
free (E->eco);
return 0;
} |
J'ai une erreur de segmentation sur E->eco= (struct COORD *) malloc((10)*sizeof(struct COORD));
Votre modification LittleWhite, en écrivant
Code:
1 2 3 4
| struct COORD *ECO;
ECO = (struct COORD *) malloc((10)*sizeof(struct COORD));
struct All_variables *E;
E->eco=ECO ; |
me permet de résoudre cette erreur de segmentation, et ca marche !
Cependant ce que je disait est que je ne comprenais pas pourquoi on pouvait allouer de la mémoire pour ECO et pas pour E->eco, qui sont à priori du même type (pointeur vers une structure).
Je vais maintenant essayer ta solution quetzacoatl :
En codant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include <stdio.h>
#include <stdlib.h>
int main()
{
struct COORD {
double centre[4];
double size[4];
} ;
struct All_variables {
struct COORD* eco;
};
struct All_variables *E=malloc(sizeof(struct All_variables));
E->eco[0].size[1]=0.3;
fprintf(stderr,"ecosize=%e \n", E->eco[0].size[1]);
free (E->eco);
return 0;
} |
J'ai toujours une erreur de segmentation. Le problème je crois est que dans ce cas je n'alloue nul part de mémoire pour *eco. Il suffirait que je rajoute une alloc pour E->eco :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include <stdio.h>
#include <stdlib.h>
int main()
{
struct COORD {
double centre[4];
double size[4];
} ;
struct All_variables {
struct COORD* eco;
};
struct All_variables *E=malloc(sizeof(struct All_variables));
E->eco = (struct COORD *) malloc((10)*sizeof(struct COORD));
E->eco[0].size[1]=0.3;
fprintf(stderr,"ecosize=%e \n", E->eco[0].size[1]);
free (E->eco);
return 0;
} |
La, ca marche !! Et ca semble assez logique et carré.