Это проблема работы с памятью. Вы там освобождаете память из-под str перед тем, как попросить gmp заполнить эту строку данными:
free(str);
mpz_get_str (str,10 , mul);
gmp пишет данные туда, где была строка. Но в это место нельзя писать после free. Иногда так получается. что менеджер памяти хранит там какие-то свои данные, которые вы портите и потом получаете об этом ошибку. Память может быть возвращена системе, и тогда программа может упасть вообще при попытке записать туда что-то. Или ничего заметного может не произойти вообще.
Как это часто бывает с ошибками работы с памятью, любая мелочь, вроде фазы луны или лишнего отладочного вывода где-то, может изменить то, как эта испорченная память используется и ошибка может не вызвать падения.