使用结构中的成员进行动态分配
Dynamic Allocation using a member in a structure
我尝试为结构成员分配内存:
这是结构:
struct conserved_variables {
double **roh;
double **mx;
double **my;
double **E;
};
我构造了一个这种结构的数组
conserved_variables ** U= new conserved_variables*[Ny];
for (int i = 0; i < Ny; i++)
{
U[i] = new conserved_variables[Nx];
}
然后我尝试为这个结构中的每个成员分配数组:
for (int i = 0; i < Ny; i++)
for (int j = 0; j < Nx; j++)
{
U[i][j].E = new double*[Order + 1];
U[i][j].mx = new double*[Order + 1];
U[i][j].my = new double*[Order + 1];
U[i][j].roh = new double*[Order + 1];
for (int k = 0; k <= Order; i++)
{
U[i][j].roh[k] = new double[Order + 1];
U[i][j].mx[k] = new double[Order + 1];
U[i][j].my[k] = new double[Order + 1];
U[i][j].E[k] = new double[Order + 1];
}
}
我收到此错误消息:
Exception thrown at 0x01153FDD in FR_1D_Advection_Equation.exe: 0xC0000005: Access violation writing location 0xCDCDCDCD.
If there is a handler for this exception, the program may be safely continued.
这是内存局部性的噩梦。
至于你的实际错误,你对你的内部循环不小心:
for (int k = 0; k <= Order; i++)
// ^
// you mean k
这是爆炸性的,因为您不小心将 i
推到了 U
数组的边界之外。如果您使用调试器的时间与您在 Stack Overflow 上提问的时间一样多,应该很容易发现。
我尝试为结构成员分配内存: 这是结构:
struct conserved_variables {
double **roh;
double **mx;
double **my;
double **E;
};
我构造了一个这种结构的数组
conserved_variables ** U= new conserved_variables*[Ny];
for (int i = 0; i < Ny; i++)
{
U[i] = new conserved_variables[Nx];
}
然后我尝试为这个结构中的每个成员分配数组:
for (int i = 0; i < Ny; i++)
for (int j = 0; j < Nx; j++)
{
U[i][j].E = new double*[Order + 1];
U[i][j].mx = new double*[Order + 1];
U[i][j].my = new double*[Order + 1];
U[i][j].roh = new double*[Order + 1];
for (int k = 0; k <= Order; i++)
{
U[i][j].roh[k] = new double[Order + 1];
U[i][j].mx[k] = new double[Order + 1];
U[i][j].my[k] = new double[Order + 1];
U[i][j].E[k] = new double[Order + 1];
}
}
我收到此错误消息:
Exception thrown at 0x01153FDD in FR_1D_Advection_Equation.exe: 0xC0000005: Access violation writing location 0xCDCDCDCD.
If there is a handler for this exception, the program may be safely continued.
这是内存局部性的噩梦。
至于你的实际错误,你对你的内部循环不小心:
for (int k = 0; k <= Order; i++)
// ^
// you mean k
这是爆炸性的,因为您不小心将 i
推到了 U
数组的边界之外。如果您使用调试器的时间与您在 Stack Overflow 上提问的时间一样多,应该很容易发现。