C++程序编译可以通过,但一运行就停止!出现了 access violation reading location 0x00000000.

qq_41891440 2018-04-03 09:45:55
截取了出问题的一部分:
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]赋值就出问题,求各位大神解答!!!
...全文
1021 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
百合杰 2018-04-08
  • 打赏
  • 举报
回复
单步下看看先
赵4老师 2018-04-04
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧