尝试访问矢量条目时出现分段违规

时间:2014-12-04 20:53:57

标签: c++ vector root

我已经创建了一个类,比如我将其命名为MyClass,以及另一个继承自它的类,比如说MyClassDaughter然后我尝试了以下内容:

MyClassDaughter *MyClassDaughterPointer;
vector <MyClass*> MyClassVector;
MyClassVector.push_back(MyClassDaughterPointer);
MyClassVector[0]->SetSomethingInMyClassDaughter;

当我尝试运行可执行文件时,它会说&#34; Segmentation Violation&#34;。 (我认为必须说我的代码中有一些Root内容......这可能是问题吗?无论如何,我知道,通常情况下,分段违规错误是由于尝试访问我们没有权限的内存而导致的访问,但我认为我有权访问此内存。我错了吗?)

2 个答案:

答案 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的工作。但调试模式总是试图将地址加载到某个寄存器。