オブジェクトの初期化中に(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);
[]
オペレータが結合するより緊密より*
ので、括弧は、所望のグループ化を得るために必要とされます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加