C++程序编译可以通过,但一运行就停止!出现了 access violation reading location 0x00000000.
截取了出问题的一部分:
Matrix Ass(Number,Number);
Ass.data = { 0 };
double(*ass)[10] = new double[10][10];
for (i = 0; i <Number; i++)
{
for (int j = 0; j < Number; j++)
{
double rx;
double ry;
double rangle;
double f4, f5, f6, f7;
rx = (boundaryelement[i].CenterPoint.x - boundaryelement[j].CenterPoint.x)*cos(boundaryelement[j].angle) + (boundaryelement[i].CenterPoint.y - boundaryelement[j].CenterPoint.y)*sin(boundaryelement[j].angle);
ry =-(boundaryelement[i].CenterPoint.x - boundaryelement[j].CenterPoint.x)*sin(boundaryelement[j].angle) + (boundaryelement[i].CenterPoint.y - boundaryelement[j].CenterPoint.y)*cos(boundaryelement[j].angle);
rangle = boundaryelement[i].angle - boundaryelement[j].angle;
f4 = F4(rx, ry, boundaryelement[j].a, v);
f5 = F5(rx, ry, boundaryelement[j].a, v);
f6 = F6(rx, ry, boundaryelement[j].a, v);
f7 = F7(rx, ry, boundaryelement[j].a, v);
ass[i][j]= 2 * G*(-sin(2 * rangle)*f4 - cos(2 * rangle)*f5 - ry*(sin(2 * rangle)*f6 - cos(2 * rangle)*f7));
Ass(i,j)=ass[i][j];
cout << Ass.data[i][j] <<" ";
}
cout << endl;
}
其中,Matrix是我定义的矩阵,结构如下:
class Matrix
{
public:
long row;
long col;
double** data;
Matrix(long row, long col);
~Matrix();
Matrix operator=(const Matrix& M);
Matrix Matrix::operator=(const double A[10][10]);
double& operator()(long i, long j){ return data[i][j]; }
void Assign(Matrix& sub, long br, long bc, long m, long n);
};
Matrix::Matrix(long Row, long Col)
{
row = Row;
col = Col;
data = new double*[row];
for (long i = 0; i<row; i++)
data[i] = new double[col];
}
Matrix::~Matrix()
{
if (data)
{
for (long i = 0; i<row; i++)
{
if (data[i])
{
delete[] data[i];
data[i] = 0;
}
}
delete[] data;
data = 0;
}
}
Matrix Matrix::operator=(const Matrix& M)
{
long i, j;
for (i = 0; i<row; i++)
for (j = 0; j<col; j++)
data[i][j] = M.data[i][j];
return *this;
}
void Matrix::Assign(Matrix& sub, long br, long bc, long m, long n) //给矩阵特定位置的子矩阵赋值
{
long i, j; //sub:用来给子矩阵赋值的矩阵
for (i = 1; i <= m; ++i) //br: 待赋值子矩阵的第一个元素在母矩阵中的行
for (j = 1; j <= n; ++j) //bc: 待赋值子矩阵的第一个元素在母矩阵中的列
data[br + i - 2][bc + j - 2] = sub(i, j); //m 待赋值子矩阵的行数
} //n 待赋值子矩阵的列数
调试的时候,在Ass.data[i][j]的赋值上出现 access violation reading location 0x00000000,应该是访问异常。
我换成了上面所示的ass[i][j]二维数组时,调试完全可以,但是一给Ass[i][j]赋值就出问题,求各位大神解答!!!