从派生类数组中读取访问冲突

And*_*old 3 c++ derived-class

(与此问题相关.)

我有一个基类Base和两个派生类,Der1Der2.(请参阅基本实现的链接问题.每个都有许多公共属性.)在我的程序中,我创建了一个这样的数组Base:

Base *array[10];
int count = 0; // program-wide count of how many objects are in the array
Run Code Online (Sandbox Code Playgroud)

再后来我用的情况下填补它Der1Der2如下:

Der1 d = Der1();
d.x = 0; // Filling in public properties
d.y = 1;
d.z = 3;
array[count] = &d;
count++;
Run Code Online (Sandbox Code Playgroud)

几乎相同的代码用于Der2.

很久以后,我使用数组调用这些类中定义的函数:

int result = array[i]->SomeFunction(x, y);
Run Code Online (Sandbox Code Playgroud)

我的代码编译得很好,但是当我尝试运行它时,我在program.exe中得到"0x00232d60处的未处理异常:0xC000005:访问冲突读取位置0x04064560."

当我看一下我想要访问的数组中的对象时,所有属性的值都是0.0000而不是它们应该是的值.还有两种double类型的数组,看起来最后几个元素是未初始化的("1.572398880752e-311#DEN"或"-9.2559631349317831e + 061"或类似).

我一直在做.NET太长时间,忘记了很多关于指针的知识,我假设这是我的问题的根源......有关如何修复此错误的任何建议?

Pup*_*ppy 6

您使用指向局部变量的指针填充数组.只要原始局部变量仍然有效,它们才有效.最有可能的是,您尝试访问的对象超出了范围.尝试在堆上分配它们,看看是否能解决问题.