我已经创建了一个类,比如我将其命名为MyClass
,以及另一个继承自它的类,比如说MyClassDaughter
然后我尝试了以下内容:
MyClassDaughter *MyClassDaughterPointer;
vector <MyClass*> MyClassVector;
MyClassVector.push_back(MyClassDaughterPointer);
MyClassVector[0]->SetSomethingInMyClassDaughter;
当我尝试运行可执行文件时,它会说&#34; Segmentation Violation&#34;。 (我认为必须说我的代码中有一些Root内容......这可能是问题吗?无论如何,我知道,通常情况下,分段违规错误是由于尝试访问我们没有权限的内存而导致的访问,但我认为我有权访问此内存。我错了吗?)
答案 0 :(得分:2)
你没有初始化MyClassDaughterPointer,所以你将一些随机(狂野)指针推送到向量。
您需要创建MyClassDaughterPointer的新实例。假设您有一个默认构造函数,它将如下所示:
MyClassDaughter *MyClassDaughterPointer = new MyClassDaughterPointer();
答案 1 :(得分:0)
指针
MyClassDaughter *MyClassDaughterPointer;
从来没有被设置为任何东西,但是如果它在堆栈上有一些未初始化的内容,或者只是null是静态的。因此,您无法像以前那样尝试访问它,从而导致未定义的行为。
MyClassVector[0]->SetSomethingInMyClassDaughter; // that is same pointer set in vector entry
不确定编译器会做什么,只要它通常有这样的代码进行优化并且不会产生任何影响 - 只要没有使用该指针,就没有CPU的工作。但调试模式总是试图将地址加载到某个寄存器。