C ++通过复制分配问题

我似乎具有以下功能的麻烦:

void OtherClass::copy_this( int index, MyClass &class_obj) { if(index < MAX_index) class_obj = array_of_MyClass[index]; }

OtherClass保持MyClass的对象的数组,我想这个函数来选定的对象复制出数组进入提供CLASS_OBJ。

当我运行,该方案具有分段错误,当它达到此功能。 在gdb运行它,看着回溯发现,当它击中了分配行,则执行倒退近100线成一个完全不同的功能的中间。 该行就跳到是:

temp_obj = array_of_MyClass[other_index]

而从GDB回溯相关的输出是:

#0 0x0000003c7ae7256c in memcpy () from /lib64/tls/libc.so.6 #1 0x000000000043264e in MyClass::operator= (this=0x4c0000004c, _ctor_arg=@0x7fbffd8228) at ../location.cpp:156 #2 0x0000000000432569 in OtherClass::copy_this (this=0x7fbffd8220, index=0, section=@0x4c0000004c) at ../location.cpp:254

显然,这是同类型的操作,但为什么地球上会执行移动这样呢? 我没有longjumps,goto方法等任何地方的程序。 我也没有用户定义的赋值运算符,拷贝构造函数等,因此从回溯了“经营者=”是令人费解。

以前有人问,不,我不能张贴整个代码。 (!对不起)我意识到,可能导致无法识别我的问题; 如果是这样的话,只是让我知道。

提前致谢!



通过它再次运行和测试了几个“最简单的用”案件之后,似乎这个问题实际上是引入较早的地方在执行,所以它的回到绘图板我。 谢谢大家的帮助!

--------------解决方案-------------

是该指数有效吗? 我看到你MAX_INDEX比较,而是你的数组包含MAX_INDEX,初始化的元素呢? 我问,因为,如果你复制一个无效的对象,你有一个像你描述的不确定(不愉快)的行为。

另一种可能性(如果不是这一个)是它的时间,使一个完整的重建。 无论是调试信息已损坏,或生成的代码是不完整的(由于在构建过程中不管是什么原因)。

是代码编译优化器的标志吗? 优化器可以做的非常奇怪的事情,执行的流程,包括从一个跳跃的功能转移到一个完全无关的功能恰好有一段代码,做事情的第一个功能需求。

行,你说执行向后跳跃是从一个分配给MyClass类的一个对象。 这就是为什么你看到MyClass::operator=在你的回溯。 你说你有没有用户定义的赋值运算符或拷贝构造函数,所以这可以解释的memcpy()正上方的回溯,因为这是复制的默认实现(浅拷贝)。

在这种情况下,我想可能是有帮助的,以实现一个拷贝构造函数(用于MYCLASS)。

对于段错误本身 - 是如何被数组初始化? 什么在该阵列的索引0? (这似乎在呼叫已被使用)

你没有他们,但是编译器产生他们无论如何,这就是你所谓的OU时所使用的=运算符就可以了。 什么是最有可能的是,默认的赋值运算符是不够的MyClass的,这就是为什么它不工作。 明确实施它们,看看是否能解决问题。

没有更多的源代码,有一点是可以推荐。

应该已经祈祷,注意几个帧回来,我就已经看到了答案。

在MyClass的对象,我试图进入已被初始化为复制数据NULL指针,这就是错误memcpy()来自何处。 (“不能在地址0x0访问内存” - 德哦!)真不敢相信我错过了...

感谢您的帮助 - 我也许会一直继续打我的头靠在墙上有我没试过你的解决方案。 明确地写赋值运算符使我相信,问题是其他地方。

特惠重瓣!

分类:C# 时间:2015-03-14 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.899 (s). 10 q(s)