为什么将指针作为参数传递时内存分配失败
Why the memory allocation failed when passing the pointer as argument
我刚刚尝试了两段代码来为二维数组分配连续内存并使用 g++ 编译代码。第二段代码运行良好,但第一段代码会导致分段错误(核心转储)。第一段代码有什么问题,为什么不同。
感谢您的帮助!
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;
}
在第一个片段中,您按值传递了双指针。因此,当您调用 mem_alloc2D(p, Nx, Ny)
时,您传递的指针 p
不是函数出口处的 "updated" 。通过引用传递指针
void mem_alloc2D(double** &U, unsigned Nx, unsigned Ny)
应该可以正常工作。
在第二个片段中,您 return 一个新创建的指针,因此它工作正常。
我刚刚尝试了两段代码来为二维数组分配连续内存并使用 g++ 编译代码。第二段代码运行良好,但第一段代码会导致分段错误(核心转储)。第一段代码有什么问题,为什么不同。
感谢您的帮助!
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;
}
在第一个片段中,您按值传递了双指针。因此,当您调用 mem_alloc2D(p, Nx, Ny)
时,您传递的指针 p
不是函数出口处的 "updated" 。通过引用传递指针
void mem_alloc2D(double** &U, unsigned Nx, unsigned Ny)
应该可以正常工作。
在第二个片段中,您 return 一个新创建的指针,因此它工作正常。