在迭代指针后,如何通过指针正确删除双精度数组?

Mik*_* N. 1 c++ memory delete-operator

我使用以下代码创建了一个双精度数组:

double *points = new double[(ii+1)*(jj+1)*(kk+1)*3];
Run Code Online (Sandbox Code Playgroud)

我意识到为了删除数组,我所要做的就是:

delete[] points;
Run Code Online (Sandbox Code Playgroud)

然而; 数组是在一个函数(称为create_points)中创建的,该函数传递第一个元素的地址,如下所示:

return &points[0];
Run Code Online (Sandbox Code Playgroud)

调用此函数的代码然后遍历地址:

double *address = create_points(x_dim,y_dim,z_dim);
for(int k=0; k<x_dim+1; ++k)
    for(int j=0; j<y_dim+1; ++j)
        for(int i=0; i<z_dim+1; ++i) {
            v[p_count].x = *address;
            ++address;
            v[p_count].y = *address;
            ++address;
            v[p_count].z = *address;
            ++address;
            ++p_count;
        }
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,如何正确删除地址用于访问的双打数组?我可以简单地去delete[] address,或者我必须以其他方式这样做吗?

Ada*_*eld 5

你不能说delete[] address,这样做是未定义的行为.您必须通过指向数组原始基址的指针将其删除.所以,如果你要增加指针,你需要记住原始指针(或重新计算它):

double *base_address = create_points(...);
double *address = base_address;
// do stuff with address, increment it, etc.
delete [] base_address
Run Code Online (Sandbox Code Playgroud)