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];

新向量仅创建一个向量,但它包含 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 回答