Tel qu'écrit actuellement, ton programme ne fonctionnera pas et déclenchera probablement une
segfault :
1 2 3 4
| l_word *tab[100];
int n = 0;
while(n < 100){
*tab[n] = (l_word) malloc(sizeof(l_word)); |
Tu déclares un tableau de cent pointeurs, lesquels ne sont pas initialisés
a priori et ne pointent donc sur rien. Dans la boucle, tu « utilises » le pointeur pour aller stocker à l'endroit qu'il pointe la valeur renvoyée par
malloc. Comme ton pointeur pointe n'importe où, et en aucun cas vers un espace mémoire dûment initialisé au préalable, ton programme est voué au
crash.
Quand, en revanche, tu écris
tab[n] = (l_word *) malloc(sizeof(l_word)), alors tu indiques que c'est au pointeur lui-même que tu veux affecter quelque chose (et pas à ce qu'il pointe), et que le pointeur renvoyé par
malloc est un « pointeur vers un
l_world », ce qui est cohérent en soi (adresse mémoire du début espace alloué) ainsi qu'avec la définition de ton « tableau de pointeurs » :
l_word *tab[100], où tu déclares bien un « tableau de cent pointeurs vers un l_word », ce qui correspond à ce qui est renvoyé par l'expression à droite de « = ».
Partager