使用结构中的成员进行动态分配
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上提问的时间一样多,那么应该很容易发现。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 删除类成员的动态分配内存的最佳方法是什么
- 类成员的动态分配和值
- C++中类成员的动态分配
- 在 c++ 中将动态分配的数组作为结构成员的分段错误?
- 我应该在 init 上设置类成员(需要动态分配)还是稍后分配
- 动态分配的成员变量。有什么意义?
- 对齐的成员变量和动态分配
- 尝试使用成员函数访问动态分配的成员变量时读取访问冲突
- 对于数据成员,如果包含对象已在动态内存中,则动态分配此变量(或不动态分配)之间是否有任何区别
- 当类对象完成时,是否为 C++ 类的数据成员动态分配的内存会释放
- C++:删除动态分配的类时,是否也会删除不在堆上的私有成员?
- 可以将成员变量 (CBrush *) 分配给在类构造函数中动态分配的内存,并出现新的原因问题
- 类构造函数中动态分配的数据成员
- 具有对齐成员的对象的动态分配-可能的解决方案
- 具有动态分配成员的结构体的向量
- 为类的成员变量释放动态分配的内存会产生错误
- 处理包含动态分配成员的对象向量