通过引用传递指针会使程序崩溃

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);

[] 运算符比 * 绑定得更紧密,因此需要括号才能获得所需的分组。