Попробую объяснить путь к понимаю проблемы переполнения.
double temp = random(a, b);
Подставьте сюда сами разные значения ( напиример 0 5 или -5 и 3 ) подумайте какие возможные результаты может вернуть функция ( максимальный и минимальный ). Прибавьте граничные результаты к b ( у вас же temp + b ) вспомните какое максимальное количество элементов вы выделили.
2. Все-таки обнулите выдленный блок памяти. Можно руками в цикле а можно через
www.cplusplus.com/reference/cstdlib/calloc например ( там и с параметрами запутаться сложнее ).
3. Ваша функция result ожидает количество итераций, а, б а вы ей передаете а, б, количество итераций. Как следствие все значения попадают не туда куда следует. Возможно компилятор пытался вам об этом сообщить ворнигнами - читайте их, они ваши друзья.