В вашем коде нет ничего недопустимого.Очевидно, вектор x
был каким-то образом поврежден до того, как вы вызвали distance
, либо его время жизни истекло, либо вы получили повреждение памяти, либо какой-то другой UB.Например, что-то вроде этого:
vector<long> &getData()
{
vector<long> data;
// fill data
return data;
}
// ...
distance(getData(), y);
vector<long> *data = new vector<long>();
// fill data
delete data;
distance(*data, y);
long data[n] = ...;
vector<long> x(n);
memcpy(&x, data, sizeof(data) / sizeof(data[0]));
vector<long> *data = 0;
distance(*data, y);
И в других случаях может быть гораздо больше, в любом случае, решение состоит в том, чтобы проверить, откуда взято x
и где оно уничтоженоили становится недействительным.