输出一个3D数组的c++代码

output of a 3D array in C++ code

本文关键字:数组 c++ 代码 3D 一个 输出      更新时间:2023-10-16

我正在写c++代码,有一个关于3d数组的问题:

double ***excit_pn;
excit_pn = new double **[num_y];
for (int i = 0; i < num_y; i++)
{
    excit_pn[i] = new double *[num_x];
    for (int j = 0; j < t.size(); j++)
    {
        excit_pn[i][j] = new double[num_y];
        for (int k = 0; k < num_y; k++)
        {
            excit_pn[i][j][k] = 0;
        }
    }
}
for (int i = 0; i < 5; i++)
{
    for (int j = 0; j < 5; j++)
    {
        for (int k = 0; k < 5; k++)
        {
            cout << excit_pn[i][j][k];
        }
        cout << endl;
    }
    cout << endl;
}
上面的

代码是我的代码的一部分。我想测试数组excit_pn的值。当我运行代码时,运行结果都是4.26329e-312,而不是0。但是当我加上

cout<<excit_pn[i][j][k];

行后:

excit_pn[i][j][k] = 0;

,运行结果为0。

我的第二个问题是:
for (int i = (num_y - num_el / 2); i < (num_y - num_el / 2)+num_el; i++)
{
    for (int j = 0; j < ts.size(); j++)
    {
        for (int k = (num_x - num_el / 2); k < (num_x - num_el / 2)+num_el; k++)
        {
            excit_pn[i][j][k] = excit_ptn[i - (num_y - num_el / 2)][j][k - (num_y - num_el / 2)];
        }
    }
}

这部分有一个错误:0xC0000005: Access violation reading location 0xffffffffffffffffff。上面已经定义了Excit_ptn:

ts_n = new double **[num_el];  //number of elements is num_x while the nonzero element is num_el
ye_n = new double **[num_el];
excit_ptn = new double **[num_el];
for (int i = 0; i < num_el; i++)
{
    ts_n[i] = new double *[ts.size()];
    ye_n[i] = new double *[ts.size()];
    excit_ptn[i] = new double *[ts.size()];
    for (int j = 0; j < ts.size(); j++)
    {
        ts_n[i][j] = new double[num_el];
        ye_n[i][j] = new double[num_el];
        excit_ptn[i][j] = new double[num_el];
        for (int k = 0; k < num_el; k++)
        {
            ts_n[i][j][k] = ts[j] + con_delay[i][k];
            ye_n[i][j][k] = exp(-ts_n[i][j][k] * ts_n[i][j][k] / (2 * tv));
            excit_ptn[i][j][k] = p0* ye_n[i][j][k] * cos(2 * PI*fc*ts_n[i][j][k]);
        }
    }
}

thanks a lot

在中间循环分配中,t.size()的循环结束:

for (int j = 0; j < t.size(); j++)

但是你使用变量num_x分配。

excit_pn[i] = new double *[num_x];

这两个量应该相等。

在您的打印循环中,您再次使用不同的尺寸。为了更安全,在调试时应该尽量在所有地方使用相同的维度,尤其是