Почему ГПСЧ нужно инициализировать в main()?
Не должно быть ошибки. Если вы только не в цикле его инициализируете. Приведите код который приводит к ошибке.
Потому что в srand() будет передаваться одинаковое число. Функция time возвращает число секунд от начала 1970 года, её значение меняется раз в секунду, а цикл программы выполняется намного быстрее.