2012-03-16 16 views
-1
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。std :: vector const_iteratorを使用するとプログラムが終了する

ベクトルの先頭にconstイテレータを割り当てようとすると、myコードが終了しますか? なぜこれが起こっていますか? ベクトルは0で初期化されます。

+3

この機能を呼び出すコード(最小限)と、プログラムの終了時に表示されるエラーメッセージを入力してください。あなたはこれにデバッグしましたか? –

+2

"memset(&vec、0、sizeof(vec))"が "ベクトルが0で初期化されている"という場合は、それが問題です。 – stefaanv

+0

@KerrekSBは心配しませんが、あなたはcpxとcpyを参照してくださいあなたは盲目的なことはありません反復子は宣言され、コードの同じ行に割り当てられている.. – shofee

答えて

1

コード自体に無効なものは何もありません。あなたがdistanceに電話する前に、どういうわけかxのベクターが損傷していたようです。寿命は終わっているか、メモリーの矛盾や他の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から来て、どこが破棄または無効になっている場所を確認することです。

関連する問題