0

VectormyVariableへの値の割り当てに関するC++

こんにちは、みんな。

私はこの構造体を持っています

struct Point
{
int x,y;
}

そして私のmain.cppで私はこのようなものを手に入れました

int main()
{
vector<Point> myPoints;

myPoints[0].x = 1;
myPoints[0].y = 1;

myPoints[1].x = 2;
myPoints[1].x = 2;

return 0;
}

そして、セグメンテーションコアダンプを取得します。ベクトルの要素に値を設定することの何が問題になっていますか。

ご案内ありがとうございます!

4

3 に答える 3

5
vector<Point> myPoints;

オブジェクトの空のベクトルを作成しPointます。myPoint[0]空であるため、などにアクセスすることはできませんmyPoint[1]。これを実行しようとしても、要素は自動作成されません。代わりに、未定義の動作 (通常はセグメンテーション違反) を引き起こします。

push_backベクターに要素を追加するために使用します。

myPoints.push_back(Point(1,1));

または、代わりに、デフォルトで構築された要素が含まれるようにベクトルのサイズを変更します。

myPoints.resize(2);

のコンストラクターに引数を使用して、std::vector初期化時にサイズを変更することもできます。

vector<Point> myPoints(2);  // auto-resizes the vector to length 2

について注意してくださいpush_backC++11 では、emplace_back()代わりに次のpush_back()ように使用することもできます。これは、新しく作成された要素をベクターに追加する最も効率的な方法です。myPoints.emplace_back(1,1);Point1,1

于 2012-10-29T04:34:36.100 に答える
0

オブジェクトを初期化しませんでした。オブジェクトを作成してからベクトルに入れる必要があります。そうしないと、セグメンテーション違反を引き起こしている存在しないものに作用しています。

例:

Point myPoint;
myPoints.push_back(myPoint);
myPoints[0].x = 1;
于 2012-10-29T04:40:06.540 に答える
0

問題は、まだ作成されていない要素にアクセスしようとしていることです。

この行の後: vector myPoints;

myPoints正確に0要素を持つベクトルがあります。したがって、myPoints[0]無意味です。

次のいずれかを実行する必要があります。

  1. あらかじめ決められたサイズのベクトルを作成します: vector<Point> myPoints(2);(注: 後で拡大または縮小できます)、実行しmyPoints[0].x=1ます。

  2. ベクトルのpush_backメソッドを使用して、新しい要素をベクトルに追加します。つまり、myPoints.push_back(Point(0, 0));

  3. 新しいベクター オブジェクトを宣言したら、resizeメソッドを使用して 2 つの新しい要素にスペースを割り当てます。

于 2012-10-29T04:36:16.707 に答える