オブジェクトへのポインターを別のオブジェクトのインスタンス内のベクターに追加しようとすると、セグ フォールトが発生します。一度に複数のポインターをベクターに追加していますが、最初のポインターは機能しますが、2 番目の試行ではセグ フォールトが発生し続けます。
class Observer {
Observer();
observe();
};
class Subject {
std::vector<Observer*> *observers;
std::string name;
Subject();
virtual std::string getName();
virtual void addObserver(Observer *observer) {
observers->push_back(observer);
}
};
class Base : public Subject {
Base(std::string newName) { name = newName; }
};
class Derivative : public Subject, public Observer {
float a;
float b;
float c;
Derivative(a, b, c) { this->a = a; this->b = b; this->c = c; }
};
class Board : public Base {
Base *base;
Board(std::string newName, Base *newBase) { name = newName; base = newBase; }
void initializeDerivatives(int start, int end) {
for (int i = start; i <= end; ++i) {
addObserver(new Derivative(start, start + 1, start + 2)); //works
base->addObserver(new Derivative(start, start + 1, start + 2)); //THIS WORKS
addObserver(new Derivative(start, start + 2, start + 3)); //works
base->addObserver(new Derivative(start, start + 2, start + 3)); //seg fault here
}
}
};
int main() {
Base myBase("MYBASE");
Board myBoard("MYBASE", myBase);
myBoard.initializeDerivatives(1, 10);
}
myBoard と myBase をポインターとして宣言したときに、以前にセグ フォールトが発生していました。 Base* myBase = new Base("MYBASE"); Board* myBoard = new Board("MYBASE", myBase);
そして、 new 演算子を使用すると実際にオブジェクトのインスタンスが初期化されると思っていたので、その理由がわかりませんでした。実際のオブジェクトを作成するように変更しても、1 つのポインターをオブザーバー ベクトルに追加することはできますが、2 つ目のポインターは機能しません。何かご意見は?