指针和复制构造函数:奇怪的行为?

时间:2018-03-06 15:27:45

标签: c++ runtime-error

在Windows 7(64位)中使用g ++ 4.8.3编译时,以下程序打印969。

取消注释Y复制构造函数的声明,程序会产生分段错误。对地址的分析表明,aa.value始终具有相同的地址。

在前一种情况下(评论)aarg1分配在不同的位置,在后者(无评论)中它们共享相同的位置,因此内容969被错误地解除引用为指针。

任何人都能解释为什么行为会发生变化吗?似乎在前一种情况(评论)中使用参数值,在后一种情况下使用参考参数(无评论)。

#include <iostream>

struct X
{  double value; };

struct Y {
  // Uncommenting copy constructor, myFunc should behavior in same way
  // Y(const Y&);
  X *ptr;
};

void myFunc(Y arg1) { std::cout << arg1.ptr->value << std::endl; }

typedef void (*XLFUNC) (void*);

int main() {
  X a;
  a.value = 969;
  XLFUNC xlFunc = (XLFUNC)myFunc;
  xlFunc(&a);
  return 0;
}

0 个答案:

没有答案