通过引用传递指针会使程序崩溃
Passing a pointer by reference crashes the programme
我正在尝试创建一个 class 并在对象初始化期间分配内存(使用 init
过程)。该程序在运行时因 segfault
而崩溃。正如我发现的那样,这是因为我通过引用 **sequence
传递了指针。即使我在过程调用之前分配内存,也会发生段错误。一旦我将指针作为纯值 *sequence
传递,故障就消失了。我不能通过引用传递指针吗?
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
typedef struct
{
int *sequence;
} set;
void init(int **sequence, unsigned amount, ...)
{
va_list args;
va_start(args, amount);
*sequence = malloc(amount * sizeof(**sequence));
for (unsigned i = 0; i < amount; i++)
*sequence[i] = va_arg(args, int);
va_end(args);
}
int main(void)
{
set x;
init(&x.sequence, 5, 0, 1, 2, 3, 4);
for (char i = 0; i < 5; i++)
printf("%u\t", x.sequence[i]);
}
改变这个:
*sequence[i] = va_arg(args, int);
对此:
(*sequence)[i] = va_arg(args, int);
[]
运算符比 *
绑定得更紧密,因此需要括号才能获得所需的分组。
我正在尝试创建一个 class 并在对象初始化期间分配内存(使用 init
过程)。该程序在运行时因 segfault
而崩溃。正如我发现的那样,这是因为我通过引用 **sequence
传递了指针。即使我在过程调用之前分配内存,也会发生段错误。一旦我将指针作为纯值 *sequence
传递,故障就消失了。我不能通过引用传递指针吗?
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
typedef struct
{
int *sequence;
} set;
void init(int **sequence, unsigned amount, ...)
{
va_list args;
va_start(args, amount);
*sequence = malloc(amount * sizeof(**sequence));
for (unsigned i = 0; i < amount; i++)
*sequence[i] = va_arg(args, int);
va_end(args);
}
int main(void)
{
set x;
init(&x.sequence, 5, 0, 1, 2, 3, 4);
for (char i = 0; i < 5; i++)
printf("%u\t", x.sequence[i]);
}
改变这个:
*sequence[i] = va_arg(args, int);
对此:
(*sequence)[i] = va_arg(args, int);
[]
运算符比 *
绑定得更紧密,因此需要括号才能获得所需的分组。