Ошибка сегментации обычно означает, что вы пытаетесь получить доступ к нулевому указателю.
Вычисление последовательности Фибоначчи 50 приводит к миллионам рекурсивных вызовов, и каждый раз, когда вы выделяете 16 байтов для val, но вы никогдаосвободите эту память, когда закончите.В конце концов вы используете всю свою память.malloc
не может выделить больше для вас, поэтому он возвращает NULL.Когда вы пытаетесь сохранить что-либо в памяти с адресом NULL, вы получаете ошибку сегментации.
Вместо использования malloc
вы должны, в этом случае, просто сохранить два значения в стеке, объявив локальный массив иливсего две переменные.Стек автоматически освобождается, когда функция возвращает