缓冲区溢出错误,求指点
各位前辈:
这两天写了个求圆心的程序,程序的结构是,写了一个类,类里面用一个成员函数是通过空间中的三个点求取圆心:
类声明:
class CirCle
{
public:
double *CalCircleCenter(double *P0, double *P1, double *P2);
private:
double O[3]; //存储圆心坐标
};
成员函数定义:
double *CirCle::CalCircleCenter(double *a, double *b, double *c)
{
double P[2][2],D[2];
Eigen::MatrixXd A(3,3),B(3,3);
Eigen::Vector3d v1,O1;
P[0][0] = a[1]*b[2] - a[1]*c[2] - a[2]*b[1] + a[2]*c[1] + b[1]*c[2] - c[1]*b[2];
P[0][1] = -a[0]*b[2] + a[0]*c[2] + a[2]*b[0] - a[2]*c[0] - b[0]*c[2] + c[0]*b[2];
P[0][2] = a[0]*b[1] - a[0]*c[1] - a[1]*b[0] + a[1]*c[0] + b[0]*c[1] - c[0]*b[1];
P[1][0] = 2 * (b[0] - a[0]);
P[1][1] = 2 * (b[1] - a[1]);
P[1][2] = 2 * (b[2] - a[2]);
P[2][0] = 2 * (c[0] - a[0]);
P[2][1] = 2 * (c[1] - a[1]);
P[2][2]= 2 * (c[2] - a[2]);
D[0] = -a[0]*b[1]*c[2] + a[0]*c[1]*b[2] + b[0]*a[1]*c[2] - c[0]*a[1]*b[2] - b[0]*c[1]*a[2] + c[0]*b[1]*a[2];
D[1] = a[0] * a[0] + a[1] * a[1] + a[2] * a[2] - b[0] *b[0]- b[1] *b[1] - b[2] *b[2];
D[2] = a[0] * a[0] + a[1] * a[1] + a[2] * a[2] - c[0] *c[0] - c[1]*c[1] - c[2] *c[2];
A(0, 0) = P[0][0];
A(0, 1) = P[0][1];
A(0, 2) = P[0][2];
A(1, 0) = P[1][0];
A(1, 1) = P[1][1];
A(1, 2) = P[1][2];
A(2, 0) = P[2][0];
A(2, 1) = P[2][1];
A(2, 2) = P[2][2];
v1(0) = D[0];
v1(1) = D[1];
v1(2) = D[2];
B = -(A.inverse());
O1= B*v1;
cout << O1; //程序到这里没有问题
O[0] = O1(0);
O[1] = O1(1);
O[2] = O1(2);
//cout << O1(0)<<O1(1)<<O1(2)<<endl;
getchar();
cout << O[0] << O[1] << O[2];
getchar();
return O;
}
在main函数运行的时候,程序可以一直运行,也可以输出向量的值。但用向量元素给数组元素赋值,提示错误:
Error:在已损坏了程序内部状态的 circleforthreepoint.exe 中发生了缓冲区溢出。按“中断”以调试程序,或按“继续”以终止程序。
弄了好久,没搞明白。求指点。谢谢!