【发布时间】:2010-07-22 13:32:20
【问题描述】:
我似乎在使用以下功能时遇到了问题:
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、gotos 等。我也没有用户定义的赋值运算符、复制构造函数等,所以回溯中的“operator=”令人费解。
在有人问之前,不,我不能发布整个代码。 (对不起!)我意识到这可能无法确定我的问题;如果是这种情况,请告诉我。
提前致谢!
在再次运行它并测试了几个“最简单的用例”之后,似乎问题实际上是在执行的早期某个地方引入的,所以它又回到了我的绘图板上。谢谢大家的帮助!
【问题讨论】:
-
您是否创建了自己的复制构造函数和/或赋值运算符?您是否在启用优化的情况下进行编译(即 g++ -O3)?
-
你是怎么传入数组array_of_MyClass的?
-
更多信息...!是否有任何相关的编译器警告?有什么奇怪的演员表吗? temp_obj 是参考还是本地? -Wall 怎么样?我问是因为奇怪似乎试图使用无效的参考
-
不,我没有。我正在编译: g++ -O0 -g3 -Wall -c -fmessage-length=0
pkg-config gtkmm-2.4 --cflags --libs这是一个 Eclipse 管理的 make 项目,如果这很重要的话。
标签: c++ copy segmentation-fault variable-assignment