1

私はこれを正しい方法で行っているように感じますが、「EXC BAD ACCESS」というエラーが表示され続けます

私はクラスを持っていますが、personすべてが公開されているかなり単純です。

class person
{
    public:
    int id;
    vector<float> scores;
    float avgscore;
};

person次に、 new 演算子を使用して s のベクトルを作成します

vector<person> *people = new vector<person>[num_persons];

次に、クラス内のベクトルにアクセスしようとしますperson

(*people)[current_person].scores.push_back(temp);

ここでcurrent_person=0 で、tempは整数です。

ベクトルを正しい方法で処理していますか?

4

2 に答える 2

2

これを試して:

vector<person> people(num_persons);

その後...

people[current_person].scores.push_back(temp);
于 2012-12-02T04:17:45.953 に答える
1

この行

vector<person> *people = new vector<person>[num_persons];

new vector は vector のみを作成しますが、含まれる要素は 0 です。へのアクセス(*people)[0]は未定義の動作であり、エラー メッセージEXC BAD ACCESSがストーリーを伝えます。訪問者に person 要素を追加する必要があります。

person p1;
people->push_back(p1);  // add element to vector
(*people)[0].scores.push_back(temp); // now you are ok to visit first element.
// don't forget to delete vector at right place
delete people;

既にベクターを使用しているため、生のポインターを使用する代わりに、人にベクターを使用し続けることができます。

std::vector<person> people;
person p1;

people.push_back(person);
people[position].scores.pus_back(score);
// don't need to worry releasing people memory anymore.
于 2012-12-02T04:47:25.700 に答える