Ваш код не добавил нулевой терминатор в обратную строку. В результате произошел сбой функции printf при попытке вычислить ее длину.
Измените строку malloc на следующую
char* result = (char*)malloc((len+1) * sizeof(char));
И вам нужно добавить следующую строку в конец функции string_reverse, чтобы строка имела нулевой терминатор.
result[len] = '\0';
Пара других комментариев
- sizeof (char) не требуется. Размер символа является одним из немногих типов, определенных стандартом C, и его значение равно 1.
- Первый цикл можно заменить простым вызовом strlen
EDIT
Два других вопроса. Строка, которая на самом деле выполняет копирование символа, кажется неверной. Я считаю, что это должно быть (лен-я-1). В противном случае начальная запись символа будет происходить в (result + len), который является местом нулевого терминатора.
*(result + ((len - i) - 1)) = *(string + i);
Кроме того, не разыменовывайте результат при возврате