Bonjour

Voici ma structure :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
struct part {
  double  x, y, z ;
  double  vx, vy, vz ;
  double  frcx, frcy, frcz ;
  double  dx, dy, dz ;
  int	  nbrevoisin ;
  double  Eint, Tint ;
  int	  *listevoisin ;
} ;
typedef struct part Particules ;
J'ai une fonction où je fais les allocations de mes structures :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
int allocation( int Natom, Data *Donnees, Particules *Particule[]  ) {
 
....
 
// structure particule
  *Particule = calloc( Natom, sizeof(Particules) ) ;
  for ( iat = 0 ; iat < Natom ; iat++ ) {
    p = Particule[iat] ;
    p->listevoisin = calloc( Donnees->nbrevoisinmax, sizeof(int) ) ;
  }
 
....
 
}
Le problème c'est que j'ai un segmentation fault. J'ai exécuté avec gdb et ça me donne ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Program received signal SIGSEGV, Segmentation fault.
allocation (Natom=1000, Donnees=0xbfffed6c, Particule=0xbfffed68) at allocation.c:24
24            p->listevoisin = calloc( Donnees->nbrevoisinmax, sizeof(int) ) ;
J'ai essayé avec malloc au lieu de calloc. Et j'ai essayé aussi avec ça comme déclaration mais ça ne change rien.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
  *Particule = calloc( Natom,  sizeof(Particules) + Donnees->nbrevoisinmax * sizeof(int)  ) ;
  for ( iat = 0 ; iat < Natom ; iat++ ) {
    p = Particule[iat] ;
    p->listevoisin = malloc( Donnees->nbrevoisinmax, sizeof(int) ) ;
  }
Merci pour votre aide