std :: vector использование const_iterator завершает программу - PullRequest
0 голосов
/ 16 марта 2012
Distance distance(const vector<long> &x, const vector <short> &y)
{
    Distance total = 0.0;
    Distance diff;

    vector <long >::const_iterator cpx=x.begin(); //terminates at this line

    vector <short>::const_iterator cpy=y.begin();
    vector <long>::const_iterator cpx_end=x.end();
    for(;cpx!=cpx_end;++cpx,++cpy){
        diff = *cpx - *cpy;
        total += (diff * diff);
    }
    return total;
}

расстояние большое длинное int.

мой код заканчивается, когда я пытаюсь назначить константный итератор с началом вектора? почему это происходит? векторы инициализируются с нуля.

1 Ответ

1 голос
/ 16 марта 2012

В вашем коде нет ничего недопустимого.Очевидно, вектор 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 и где оно уничтоженоили становится недействительным.

...