重载运算符时发生SIGSEGV错误=
SIGSEGV error when overloading the operator=
_3DTocka operator=(_3DTocka _3D){
swap(*this, _3D);
return *this;
}
//main()
_3DTocka _3Dx1(5, 9, 2), _3Dx2(_3Dx1); // first one is using constructor, second one copy constuctor and they both have 5,9,2
_3Dx1 = _3Dx2;
_3DTocka是类的名称。代码编译后,程序在运行时立即给出SIGSEGV错误。。IDE转到move.h,第167行,代码:swap(_Tp&__a,_Tp&aamp;__b(
这是一个无限递归。函数swap((的工作原理如下:
void swap(Type & a, Type & b) {
Type tmp = a;
a = b; -> here it calls your operator=
b = tmp; /
}
您必须将_3D中的所有类属性分配给该
this->a = _3D.a;
this->b = _3d.b;
...
或者,您可以使用memcpy(this, &_3D, sizeof(_3D))
,但前提是您的类不包含其他对象,而只包含基本类型。
函数swap
依次调用复制赋值运算符。因此,您将得到运算符的递归调用。您应该为将交换对象的每个数据成员的类定义自己的交换函数。
相关文章:
- 为什么我的递归代码给出 sigsegv 错误?
- 哪个部分导致"SIGSEGV"错误以及如何修复它?
- 声明数组时出现 SIGSEGV 错误,而不创建新的 int[size]
- 使用队列<结构时出现 SIGSEGV 错误 *>
- 如何解决非常大的阵列输入的SIGSEGV错误
- C++ SDL 中的 SIGSEGV 错误
- 删除 QSGNode 时 QtThread 的 SIGSEGV 错误
- SIGSEGV 错误详细信息和删除步骤
- 返回0后,程序会收到sigsegv错误
- 信号名称:SIGSEGV 错误
- 在某个范围内查找素数时出现 Sigsegv 错误
- 代码中奇怪的SIGSEGV错误
- 以下代码中存在运行时-sigsegv错误
- SPOJ上简单动态编程中的SIGSEGV错误
- 本机Android应用程序中出现SIGSEGV错误
- 在带有openGL和SDL的linux上使用c++时发生SIGSEGV错误
- 在链表中插入时发生SIGSEGV错误
- SIGSEGV错误(运行时错误)
- 上传输入时出现SIGSEGV错误
- 在使用malloc的数组中出现SIGSEGV错误