【发布时间】:2020-11-03 20:38:44
【问题描述】:
我正在尝试创建一个在对象初始化期间分配内存的类(使用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); -
@AlexLop。惭愧我,谢谢。没想到问题是优先级引起的
标签: c pointers segmentation-fault