Bonjour,

J'ai fait un programme qui crée un graphe à partir d'une image 3D en mettant une arête entre chaque pixels voisins - on considére ici un 6-voisinage. Il compile très bien, mais j'obtiens un segmentation fault.
Voici le code en question (j'ai enlevé la suite du code pcq pas interessante pour le problème):
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
int main(int argc, const char* argv[])
{
  Image3D<unsigned char> img(argv[1]);
  typedef Graph<double,double,double> GraphType;
  int nb_edges = 6*img.size; //grosse sur-estimation du nbe d'aretes
  GraphType *g = new GraphType(img.size, nb_edges); 
  for (int l = 0; l < img.size; ++l)
    {
      g -> add_node(); 
    }
   //triple boucle de parcours de l'image 3D
  for (int k = 0; k < img.nbz; ++k)
    for (int j = 0; j < img.nby; ++j)
      for (int i = 0; i < img.nbx; ++i)
	{
	  int head, tail;
	  double cap=0;
	  head = (k)*img.nbx*img.nby + (j)*img.nby + (i); //le pixel courant
	    if (img.isInside(i, j+1 , k))
	    {
             //on calcule la position du noeud dans g
	     int  tail = (k)*img.nbx*img.nby + (j+1)*img.nby + (i);
	     //to do : calcul de la capacité de l'arête
	      g->  add_edge(head ,tail , cap, cap);
	    }
	  if (img.isInside(i+1, j , k))
	    {
	      int tail = (k)*img.nbx*img.nby + (j)*img.nby + (i+1);
	     //to do : calcul de la capacité de l'arête
	      g->  add_edge(head ,tail , cap, cap);
	    }
	  if (img.isInside(i, j , k+1))
	    {
             int tail = (k+1)*img.nbx*img.nby + (j)*img.nby + (i);
	     //to do :calcul de la capacité de l'arête
	      g->  add_edge(head ,tail , cap, cap);
	    }
	}
  }
En utilisant gdb, j'obtiens :
0x0804a5a1 in main (argc=0, argv=Cannot access memory at address 0xb7fb3000) at GraphCut3D.cc:89
89 g-> add_edge(head ,tail , cap, cap);

J'ai bien compris qu'il y a un problème d'accès mémoire, mais pas moyen de trouver quel symbol appelle l'adresse concernée.
Quand je demande un print de "head", c'est nickel, il me donne la bonne valeur mais quand je demande un print de "tail", j'ai "no symbol tail in context" et pareil pour "cap".
Je ne sais plus trop quoi faire. Si quelqu'un a une idée...