我正在尝试为带有指针变量的类创建一个复制构造函数。但是,当我试图访问我的新对象中的指针时,复制构造出现了问题.
/* Copy Constructor */
Solver::Solver(const
Solver &obj)
{
// Pointers to use in modified-Midpoint method.
double *m_yTemp1 = new double[CONST_numVariables];
double *m_yTemp2 = new double[CONST_numVariables];
double *m_dTemp = new double[CONST_numVariables];
// Triple pointer to store tableau of data for extrapolation.
double ***m_extrapTableau = new double**[CONST_maxDiv];
*m_extrapTableau = *obj.m_extrapTableau;
for(int i=0; i<CONST_maxDiv; i++)
{
m_extrapTableau[i] = new double*[i+1];
*m_extrapTableau[i] = *obj.m_extrapTableau[i];
for(int j=0; j<=i; j++)
{
m_extrapTableau[i][j] = new double[CONST_numVariables];
*m_extrapTableau[i][j] = *obj.m_extrapTableau[i][j];
}
}
// Pointer of step sizes for extrapolation of modified-Midpoint.
double *CONST_extrap = new double[CONST_maxDiv];
for(int i=0; i<CONST_maxDiv; i++)
{
CONST_extrap[i] = 2.*(i+1.);
}
// Change pointer of new object from already used memory to newly allocated.
*m_yTemp1 = *obj.m_yTemp1;
*m_yTemp2 = *obj.m_yTemp2;
*m_dTemp = *obj.m_dTemp;
*CONST_extrap = *obj.CONST_extrap;
}我最初的问题是:
发布于 2014-10-03 21:50:35
分段故障的问题在于:
double ***m_extrapTableau = new double**[CONST_maxDiv]; // (1)
*m_extrapTableau = *obj.m_extrapTableau; // (2) 在(1)中,将变量m_extrapTableau声明为本地构造函数。
但是在(2)中,我可以看到您有一个同名的类成员。因此,构造函数的本地m_extrapTableau将被正确地简化。但它隐藏了类成员,该类成员将保持未初始化状态以供以后使用。
关于你剩下的问题:
1)如果您实现了一个复制构造函数,您必须负责复制所需的一切。
2)传递双指针或三重指针的入口要求您在使用表的任何元素之前遍历每个级别,正确初始化指针。你应该考虑使用向量向量或矢量向量。这些更容易初始化、复制等.
3)如果它们是const,并且没有使用大括号初始化器将它们初始化为另一个值,那么它们应该是可用的。
https://stackoverflow.com/questions/26187197
复制相似问题