От склепа (3) - страница справочника Linux:
char *crypt(const char *key, const char *salt);
Возвращаемое значение: указатель на зашифрованный пароль возвращается. На ошибке, NULL
возвращается.
Так как возвращаемое значение неизвестно, если ключ и соль не даны, это должно быть динамично выделенной памятью, но valgrind не соглашается.
с страницы человека:
Возвращаемое значение указывает на статические данные Чей содержание перезаписывается каждым вызовом.
Так что это означает, что это не динамично выделяется - это одно статическое распределение (как правило, как глобальная переменная).
Со страницы, которую вы связали:
Возвращаемое значение указывает на зашифрованный пароль, серию из 13 печатаемых ASCII-символов (первые два символа представляют саму соль). Возвращаемое значение указывает на статические данные, содержимое которых перезаписывается при каждом вызове.