Bonjour,
J'ai remarqué un code sur le forum, mais j'arrive pas du tout à comprendre comment ça peut marcher.
Voici le code que l'on peut voir (http://www.developpez.net/forums/d84...#post4857991):
Mon problème est le typedef, qui est fait de manière ( si j'ai bien compris ) à ce que le tableHashage_struct soit un tableau de TAILLEHASH de tableauDynamique_struct.
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 //création de la table de hachage typedef tableauDynamique_struct tableHachage_struct[TAILLEHASH]; tableHachage_struct * CreerSimpleTableHachage() { tableHachage_struct * THash = allocExit( sizeof * THash); size_t i; for(i=0;i<TAILLEHASH; i++) { TableauDynamique_struct_ctor(&THash[i]); } return THash; }
Bref, ça encore ça passe pas trop mal dans mon cerveau.
Après, on crée un pointeur dessus. Les pointeurs, normalement, j'ai pas de problème.
Par contre, c'est dans l'utilisation de ce pointeur, qui pointe donc sur un tableau de structure de tableauDynamique_struct.
Pour remettre le problème à sa simple expression j'ai fait ce programme:
Voilà, mon code me semble bon, sauf la ligne ou j'ai mis le commentaire que j'avais un 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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 #include <stdio.h> #include <stdlib.h> typedef struct MyStruct { int x; }MyStruct; typedef MyStruct UltraStruct[100]; int main(int argc, char** argv) { { MyStruct ms; ms.x = 5; } { UltraStruct* us = NULL; us = malloc ( sizeof(sizeof * us)); if ( us == NULL ) { printf("Erreur while allocating memory\n"); return -1; } else { int i = 0; for ( i = 0 ; i < 100 ; i++ ) { /* Ici j'ai un problème */ (*us)[i].x = i; } /*us*/ free(us); } } { UltraStruct us; int i = 0; for ( i = 0 ; i < 100 ; i++ ) { us[i].x = i; } } return 0; }
Comment on remplit les éléments, de ce qui me semble un pointeur sur un tableau.
Pour verifier les erreurs ( les seg faults ne se produisent pas toujours lorsque l'on dépasse la mémoire allouées ) j'utilise gdb ( debugguage ) et valgrind ( vérification mémoire ).
Merci pour votre aide future( je suis sur que c'est vraiment un problème dans mon cerveau ).
Partager