В сущности, причина возникновения ошибки заключается в строке
v1 = х;
Поскольку у вас нет оператора присваивания, это становится:
v1 = вектор (х)
Который назвал ваш int * конструктор. Этот конструктор работает с размером, инициализированным мусором, который вызывает ошибку сегмента по мере того, как цикл переходит к неверной памяти.
Стратегически проблема в том, что вы хотите создать новый объект для типа int *, но вы не знаете, насколько велик массив, на который вы указываете.
Ваш код выглядит так, как будто вы предполагаете, что массив является правильным размером для текущего определенного вектора, и в этом случае оператор, для которого вы хотите определить эту функцию в предпочтении перед конструктором: operator = (int *)
Как правило, вы немного озадачены тем, какой объект, например,
сумма + = это -> v [i] * y. v [I];
обычно просто пишется как в этом контексте
sum + = v [i] * y. v [I];