【发布时间】:2021-05-10 20:00:24
【问题描述】:
我有一个函数,它接受一个指向双精度数的指针数组,该数组除以数组并递归。这是一个简化的版本:
void recurse(double **ptr_array, int N) {
int n = N / 2;
double **new_ptr_array = (double **) malloc(n * sizeof(double *));
for (int i = 0; i < n; i++) {
new_ptr_array[i] = ptr_array[i]; // segfault here
}
recurse(new_ptr_array, n);
// repeat for 2nd half
}
我发现当第一次调用该函数时,它运行良好,但在第一次递归时,我会在分配上得到一个段错误(在代码中表示)。我什至尝试访问ptr_array[0],但这也没有用。
有人可以向我解释为什么只有在递归时才会失败?
【问题讨论】:
-
我发现您发布的代码没有任何问题。因此,我怀疑问题出在您未发布的代码中。请提供段错误的minimal reproducible example。
-
@AndreasWenzel 您的怀疑确实是正确的。我尝试创建最小的可重现示例,并且成功了,这让我再次检查了我的代码。原来我对新数组的实例化超出了范围,因此
null实际上是在递归中传递的。 -
是的,尝试创建minimal reproducible example 的过程实际上解决了问题,使问题变得多余是很常见的。 :-) 这就是为什么总是鼓励创建一个的原因之一。
标签: c pointers segmentation-fault