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
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 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;
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 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]; }
Quelqu'un aurait-il- une idée et pourquoi printf me génère l'erreur de segmentation? Merci beaucoup de votre aide
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]); }
Partager