【发布时间】:2013-05-09 13:17:04
【问题描述】:
我将这个 3D 矩阵分配为一块内存,但是当我尝试写入该死的东西时,它给了我一个分段错误。这个东西在两个维度上都很好,但由于某种原因,我在第三个维度上遇到了麻烦……我不知道分配中的错误在哪里。对我来说它看起来很完美。
代码如下:
phi = new double**[xlength];
phi[0] = new double*[xlength*ylength];
phi[0][0] = new double[xlength*ylength*tlength];
for (int i=0;i<xlength;i++)
{
phi[i] = phi[0] + ylength*i;
for (int j=0;j<ylength;j++)
{
phi[i][j] = phi[i][0] + tlength*j;
}
}
任何帮助将不胜感激。 (是的,我想要一个 3D 矩阵)
另外,如果重要的话,这就是我得到分段错误的地方:
for (int i = 0; i < xlength; i++)
{
for (int j = 0; j < ylength; j++)
{
phi[i][j][1] = 0.1*(4.0*i*h-i*i*h*h)
*(2.0*j*h-j*j*h*h);
}
}
这确实适用于二维!
phi = new double*[xlength];
phi[0] = new double[xlength*ylength];
for (int i=0;i<xlength;i++)
{
phi[i] = phi[0] + ylength*i;
}
【问题讨论】:
-
请使用
c++ containers -
第二个代码工作不正确,它是undefined behavior,只是一些尚未崩溃的内存泄漏(但以后可能会崩溃)。使用内存泄漏检测器,例如valgrind
-
是的,毕竟没用。该实现似乎不适用于 3 个维度。
-
程序没有崩溃并不意味着它可以工作;和未定义的行为有时甚至可能表现为明显有效(但会与其他系统、场景等崩溃)
标签: c++ dynamic-memory-allocation