c++ - 为什么将指针作为参数传递时内存分配失败
问题描述
我刚刚尝试了两段代码为二维数组分配连续内存并使用 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
,在函数退出时不会“更新”。通过引用传递指针
void mem_alloc2D(double** &U, unsigned Nx, unsigned Ny)
应该让它工作。
在第二个片段中,您返回一个新创建的指针,所以它工作正常。
推荐阅读
- angularjs - angularjs中如何做国民保险号正则表达式
- java - 分布式休息调用和聚合
- mysql - 加快数以千计的 SELECT 查询
- javascript - 使用正则表达式将用户输入验证为 CSS?
- reactjs - 使用 Yarn 弹出应用程序后不再启动
- ios - 如何在 iOS 中的应用程序启动时获得键盘的高度
- typo3 - 如何克服typo3中的filetime()错误
- reactjs - ReactJS - 屏幕缩小时将溢出的元素放入“...”下拉按钮中
- php - 我可以创建一个下拉onchange函数一一更改多个表行中的下拉值吗
- google-app-maker - 如何区分一个函数是客户端脚本还是服务端脚本