Сегодня мы столкнулись с необычным явлением: коллега вызывал в своем коде нормально функционирующую функцию, которая вызывала segfault в libc (gethostbyname). Удивительно было то, что та же самая функция без проблем работала в других исходных файлах в той же среде выполнения. Удивительно, но segfault исчез при использовании valgrind, на самом деле он отлично работал с valgrind, без сообщений об ошибках.
После многих жертв, чтобы успокоить богов компилятора, мы в конце концов поняли, что заголовочный файл, объявляющий функцию, отсутствует в исходном файле, вызывающем функцию. Как только мы добавили это, все заработало нормально.
Почему gcc/ld не выдавал ошибку (или даже предупреждение), указывающую на то, что функция не распознана? Почему это работало с valgrind?
Спасибо.