私はこのような構造体を持っています:
typedef struct{
size_t length; // length of the array
size_t numbits; // number of bits allocated per val in vals
mpz_t vals[]; // flexible array to hold some number of mpz_t array
} CoolArray;
これは通常の柔軟な配列なので、malloc を使用してサイズを設定できるはずです。
void initArray(CoolArray* array, size_t length, size_t numbits){
assert(length>=1); // don't make arrays with a length<=0
// first I allocate memory for vals...
array->vals = (mpz_t*) malloc(sizeof(CoolArray)+length*sizeof(mpz_t));
// then I allocate memory for each val in vals
mpz_array_init(array->vals, (size_t)length, numbits);
return;
}
しかし、これを使用しようとすると、セグメンテーション違反が発生します。また、mpz_array_init の不適切な使用に関する苦情も寄せられています。しかし、マヌラを見てきましたが、これを正しく行っているようです。
また、次のように構造体を使用しようとしました。
typedef struct{
size_t length; // length of the array
size_t numbits; // number of bits allocated per val in vals
mpz_t* vals; // pointer to start of array
} CoolArray;
また、initArray
関数を次のように変更しました。
void initArray(CoolArray* array, size_t length, size_t numbits) {
assert(length>=1); // don't make arrays with a length<=0
// first I allocate memory for vals...
array->vals = (mpz_t*) calloc(length, sizeof(mpz_t));
// then I allocate memory for each val in vals
mpz_array_init(array->vals, (size_t)length, numbits);
return;
}
これは segfault ではありませんが、コンパイル時に の不適切な使用について苦情を受けます。また、見たい出力と一緒に、出力に大量mpz_array_init
のエラーが表示されます。malloc
私のコードが間違っている場所を教えてもらえますか? 最初のバージョンで segfault が発生するのはなぜですか? 私は人々が推奨しているように見える方法でそれをやった. mpz_array_init
また、コンパイラが不適切に使用されていると文句を言うのはなぜ
ですか?
これは、出力で得られる一種のエラーです。
gmpascal(80964) malloc: *** error for object 0x100801088: Non-aligned
pointer being freed *** set a breakpoint in malloc_error_break to debug
PS gmpascal
は私の実行可能ファイルの名前で、パスカル三角形の n 番目の行を計算します。
gcc-4.2
これらのフラグを使用してPowermacでコンパイルしているPPS :
-arch ppc64 -o gmpascal gmpascal.c -lgmp -Wall
私がここに欠けているものはありますか?