传递派生类指针时的运行时错误
Run-time error when passing derived-class pointer C++
当试图将一个对象的指针添加到另一个对象的实例中的向量时,我得到了一个segfault。我一次向矢量添加多个指针,第一个工作,但第二次尝试不断抛出seg错误。
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为指针时,我得到了seg错误:Base* myBase = new Base(" myBase ");Board* myBoard = new Board("MYBASE", MYBASE);
我不确定为什么会这样,因为我认为使用new操作符实际上会初始化对象的实例。将其更改为实际对象仍然允许我向观察者向量添加一个指针,但第二个指针不起作用。任何想法吗?
在class Subject
中,您应该更改:
std::vector<Observer*> *observers;
:
std::vector<Observer*> observers;
作为指针,您的代码不会显示该指针在任何地方被初始化。如果是在构造函数中初始化的,则可能存在内存泄漏,因为Subject
没有析构函数。
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 运行时错误:引用绑定到类型为"int"的空指针
- 运行时错误:基0x000000000000溢出到0xffffffffffffffff的指针索引表达式 (basic_st
- 在指向矢量的智能指针上使用 push_back() 时运行时错误
- C 代码的运行时错误(基于指针)
- 使用MAP指针时运行时错误
- C 指针运行时错误
- C++指针运行时错误 - 使用指针设置变量然后检索
- 返回指针时运行时错误
- 访问指针类成员变量c++时发生运行时错误
- 成员函数指针运行时错误——ESP的值在函数调用中没有正确保存
- 运行时错误C++程序:检测到glibc,munmap_chunk(),指针无效
- 内存运行时错误:我们在哪里删除这个指针
- 传递派生类指针时的运行时错误
- 数组和指针 - 运行时错误
- c++对象指针的优先级队列在运行时错误为无效堆
- 指向结构的指针出现运行时错误
- 检查指针是否为NULL并导致运行时错误