将指针作为参数传递时,为什么内存分配失败

问题描述 投票:0回答:1

我只是尝试了两段代码来为2D数组分配连续的内存,并使用g ++编译代码。第二段代码效果很好但是fisrt会导致Segmentation fault(core dumped)。第一段代码有什么问题,为什么它们不同。

谢谢你的帮助!

void mem_alloc2D(double **U, unsigned Nx, unsigned Ny) {
    U = new double*[Nx];
    U[0] = new double[Nx*Ny];
    for (unsigned r = 1; r < Nx; ++r)
        U[r] = U[0] + r*Ny;
}

double **mem_alloc2D(unsigned Nx, unsigned Ny) {
    double **U;
    U = new double*[Nx];
    U[0] = new double[Nx*Ny];
    for (unsigned r = 1; r < Nx; ++r)
        U[r] = U[0] + r*Ny;
    return U;
}
c++ c++11 memory-management heap
1个回答
3
投票

在第一个片段中,您按值传递双指针。因此,当您调用mem_alloc2D(p, Nx, Ny)时,您传递的指针p不会在函数的退出处“更新”。通过引用传递指针

void mem_alloc2D(double** &U, unsigned Nx, unsigned Ny)

应该让它发挥作用。

在第二个片段中,您返回一个新创建的指针,因此它可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.