6

私はC++、特にSTLにかなり慣れていません。ベクトルを引数として関数に渡そうとしていますが、アプリケーションがクラッシュします。Code::Blocks と MingW を使用しています。ここに簡単なコードがあります。

#include <iostream>
#include <vector>

using namespace std;

void foo(const vector<int> &v)
{
    cout << v[0];
}
int main(){
    vector<int> v;
    v[0] = 25;
    foo(v);
return 0;
}

ありがとう!

4

1 に答える 1

6

ベクトルの終わりを超えて書き込むため、クラッシュしますv[0]-これは未定義の動作です。何もしない場合、初期サイズは 0 です。(その後も同じことを読みますが、すべての賭けはその時点のかなり前にオフになっています).

あなたはおそらくやりたいと思っていました:

vector<int> v;
v.push_back(25);
foo(v);

または多分:

vector<int> v(1);
v.at(0) = 25;
foo(v);

[] 演算子の代わりに使用v.at(n)すると、未定義の動作ではなく例外がスローされます。

于 2012-08-03T17:46:19.867 に答える