horrible : valgrind m'a dit ça :
==11684== Use of uninitialised value of size 8
==11684== at 0x40A075: add_elem3 (table.h:103)
==11684== by 0x40A6D0: alloc_known (alloc.c:101)
==11684== Uninitialised value was created by a stack allocation
==11684== at 0x409E6C: add_elem3 (table.h:98)
la ligne 103 est l'appel de fonction qui ne va pas (deux posts plus heut) et la ligne 98 est l'entrée de la fonction. Alors j'ai remplacé mon code par ça, pour savoir quelle est la donnée qui n'est pas initilisé (valgrind ne me semble pas très verbeux, en même temps je découvre) par ça :
size_t s = table.size;
unsigned int o = offset;
offset = find_empty(3,t,s,o);
qui devrait avoir exactement la même sémantique (mais bon, je compile sans optimisation donc c'est sûr que ça va être compilé différemment), et là, paf, plus d'erreur avec valgrind, et plus de segfault non plus (mon programme ne fonctionne quand même pas (qu'est ce que je déteste le C...)).
Mais c'est un comportement que je n'aime pas trop. Quelqu'un aurait une idée de ce qui peut se passer avec ce code ? (et sinon, je vais regarder l'assembleur, mais j'aimerais mieux pas).