我的函数原型(prototype)应该如下所示:
void double_min_max(int **range, int min, int max)
我必须用从最小到最大的数字填充“范围”。
我不知道如何分配双指针以及如何为每个元素分配最小值。
void double_min_max(int **range, int min, int max)
{
range = (int **)malloc(sizeof(int)* 10);
int i = 0;
while (min < max)
{
**range[i] = min;
i++;
min++;
}
}
最佳答案
好的,让我们找出错误:
void double_min_max(int **range, int min, int max)
{
range = (int **)malloc(sizeof(int)* 10);
使用 malloc 进行转换是不必要的,甚至可以 lead to problems 。不要这样做。
然后你想分配给*range
,而不是range
。 range
对于您的函数来说是本地的(在 C 中,所有参数均按值传递),因此修改它永远不会对调用代码产生任何可见的影响。当你调用这个函数时,你应该传递一个指向指针的指针,这样函数就可以通过*range
来修改指针。
最后,这应该是显而易见的,但您应该根据 min
和 max
来计算所需的大小。 10
只是一个……呃……非常粗略的猜测。这不是一个好主意。
int i = 0;
while (min < max)
{
**range[i] = min;
这是错误的。 []
确实取消引用指针,因此这里有三个级别的取消引用。但它只是一个指针到指针,而不是指针到指针。另外,索引先于正常的取消引用,这不是您想要的。请改用 (*range)[i]
。
i++;
min++;
}
}
合理的实现可能如下所示:
size_t double_min_max(int **range, int min, int max)
{
// check for valid input
if (min > max) return 0;
// calculate required size
size_t size = max - min + 1;
*range = malloc(size * sizeof **range);
// check allocation succeeded:
if (!*range) return 0;
for (size_t i = 0; i < size; ++i)
{
(*range)[i] = min++;
}
return size;
}
这样调用它:
int *range;
size_t result = double_min_max(&range, 10, 20);
// result should now be 11, the size of the array `range` points to
// when done:
free(range);
关于c - Malloc双指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45712052/