加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:28:53 所属栏目:百科 来源:网络整理
导读:(与 this question相关.) 我有一个基类Base和两个派生类,Der1和Der2. (请参阅基本实现的链接问题.每个都有许多公共属性.)在我的程序中,我创建一个Base数组,如下所示: Base *array[10];int count = 0; // program-wide count of how many objects are in the
(与 this question相关.)

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

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

然后我将它填充Der1和Der2的实例,如下所示:

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而不是它们应该是的值.还有两个双类型数组,看起来最后几个元素未初始化(“1.572398880752e-311#DEN”或“-9.2559631349317831e 061”或类似).

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

解决方法

Der1 d = Der1();

在堆栈上构造Der1的实例.如果在调用SomeFunction之前d超出范围,则会出现访问冲突.您需要使用new在堆上构造Der1.

Der1* d = new Der1();

如果您不再需要它或在程序结束时需要删除d实例:

delete d;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读