gpt4 book ai didi

c++ - 从派生类数组读取访问冲突

转载 作者:太空狗 更新时间:2023-10-29 19:44:44 26 4
gpt4 key购买 nike

(与 this question 相关。)

我有一个基类 Base 和两个派生类,Der1Der2。 (请参阅基本实现的链接问题。每个都有一些公共(public)属性。)在我的程序中,我创建了一个 Base 数组,如下所示:

Base *array[10];
int count = 0; // program-wide count of how many objects are in the array

然后我用 Der1Der2 的实例填充它,如下所示:

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

Der2 使用了几乎相同的代码。

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

int result = array[i]->SomeFunction(x, y);

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

当我查看我试图访问的数组中的对象时,所有属性的值都是 0.0000 而不是它们应该是的值。还有两个 double 类型的数组,看起来最后几个元素未初始化(“1.572398880752e-311#DEN”或“-9.2559631349317831e+061”或类似内容)。

我使用 .NET 的时间太长了,忘记了很多我所知道的关于指针的知识,我假设这是我的问题的根源......关于如何修复这个错误有什么建议吗?

最佳答案

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

关于c++ - 从派生类数组读取访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5052442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com