2D矢量类在访问函数时会出错

时间:2015-02-17 13:25:42

标签: c++ class vector 2d-vector

将我的2D数组转换为2D矢量后(由于我听到的所有赞美),我的程序几乎立即中断,经过一些测试,它似乎发生在程序试图用矢量执行函数时元件。我做了一些简化的源代码,它也有错误:

#include <iostream>
#include <vector>

using namespace std;

class Dog
{
    private:
        int mass, size;
    public:
        void setMass(int);
        void setSize(int);

        int getMass();
        int getSize();
};

void Dog::setMass(int newMass) {mass = newMass;}
void Dog::setSize(int newSize) {size = newSize;}

int Dog::getMass() {return mass;}
int Dog::getSize() {return size;}

int main() 
{
    vector <vector<Dog*> > dogs(10, vector<Dog*> (10));

    dogs[0][0]->setMass(10);
    dogs[0][0]->setSize(5);
    return 0;
}

我还有一个指向Ideone的链接,因此更容易测试(以及我测试代码的位置)http://ideone.com/e.js/mqVuv3

1 个答案:

答案 0 :(得分:1)

你有一个指向狗的2D向量,但没有分配任何Dog个对象。初始化2D矢量时,指针初始化为nullptr。取消引用nullptr是未定义的行为。

除非你有充分的理由不这样做,否则我建议您使用Dogs的二维矢量:

vector<vector<Dog>> dogs(10, vector<Dog>(10));

然后你将有100个默认构造的狗,你可以愉快地设置它们的质量和大小:

dogs[0][0].setMass(10);
dogs[0][0].setSize(5);