Bonsoir tout le monde
Avant que vous ne continuez la lecture du code, je tiens à vous dire que j'ai déjà lu le tutoriel sur les pointeurs en C et C++ de son auteur CGI sur développez.com et j'ai fait de mon mieux .
En fait, j'ai un fichier nommé share_application_TCB.C où est définie la structure

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
typedef struct{
	int version; 		//kernel version
	int sub_version;	//sub version
	int ttcb_extentions;	//TTCB enabled?
	int number_of_system_machines; //number of machines
	int* TCBneighlist ; // list of TTCB neighbors
	int TCBlenneighlist; // longueur de la liste
}
tcb_kernel_info_t;
J'ai également un autre fichier nommé tcb_module.C (ici j'utilise l'API du kernel) où j'ai déclaré deux variables globales et une fonction decideau sein delaquelle je modifie les valeurs des variables globales

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
cb_kernel_info_t	kern_info;	// la structure à modifier
int neighlist[20]; //tab intermediaire pour éviter erreurs de segmentations
void TTCBdecide(int fifo, decide_in_t *in)
{
 
 
	// Au sein d'une boucle for
			tailleEid = sscanf (existingID,"%d",&neighlist[j]);
			kern_info.TCBneighlist=neighlist;
			kern_info.TCBlenneighlist=j+1;
			out.test=kern_info.TCBneighlist[j];
}
Enfin, au sein du fichier ttcbneighborhood.C 'essaie d'effectuer l'opération d'affichage du contenu krn_info.TCBneighlist[j] mais je me confronte à une erreur de segmentation que je n'arrive pas à expliquer.

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
int main()
{
 
	//for kernel info 29_12_05
	tcb_kernel_info_t krn_info;
	int ret ;
	int number_of_machines ;
	int lenneighlist; // longuer du tableau des id
	int k;
 
	decide(&descriptor, outp.tag, &outd) //appel de la fonction decide qui met à jour la variable krn_info
	//for kernel info 29_12_05
 
	ret = getTCBKernelInfo(&descriptor, &krn_info); //j'appelle la fonction getTCBKernelInfo qui retourne la structure krn_info
 
	if (ret < 0){
		closeTCBConnection(&descriptor);
		printTCBerror(ret);
		printf("On getting TTCB kernel info...\n");
		exit(1);
	}
 
	lenneighlist=krn_info.TCBlenneighlist;
	printf ("Kernel Info : Le nombre d'entités impliquées est %d \n ",lenneighlist);
 
	for (k=0;k<lenneighlist;k++)
	printf ("Agreement Kernel Info : L'entité est %d \n ",krn_info.TCBneighlist[j]);
}
Quelqu'un aurait-il- une idée et pourquoi printf me génère l'erreur de segmentation? Merci beaucoup de votre aide