当我尝试创建一个函数来返回一个对象数组时,我有一个非常(看似)奇怪的问题:
所以我创建了一个Matrix类来与现有的LAPACK例程接口(即显式存储我的矩阵列major,并具有解释存储值的函数)。我想创建一个函数来获取其中一个对象并确定矩阵的特征系统(通过DGEEV)。我试图创建一个返回poiter(Matrix *)
的函数Matrix * eigsys(const Matrix& m1) {
<Memory allocation stuff that's irrelevant to the point>
Matrix * eigs = new Matrix[4];
Matrix WR(N,1), WI(N,1), VL(N,N), VR(N,N);
<Do DGEEV, successful exit...>
eigs[0] = WR;
eigs[1] = WI;
eigs[2] = VL;
eigs[3] = VR;
}
如果它很重要,我的平等超载是
54 Matrix &Matrix::operator=(const Matrix& rhs) {
55 if(this == &rhs) {
56 return *this;
57 } else {
58 if(n != rhs.n || m != rhs.m) {
59 this->~Matrix();
60 n = rhs.n;
61 m = rhs.m;
62 alloc();
63 }
64 for(int i = 0; i < n*m; i++) {
65 mat[i] = rhs.mat[i];
66 }
67 return *this;
68 }
69 }
所有alloc()都为Matrix
分配了1D数组奇怪的是,我可以毫无问题地访问偶数索引,但奇数会产生分段错误。有什么想法吗?