我有一个这样的结构:
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 的投诉。但我看过manula,看来我做对了。
我也尝试像这样使用我的结构:
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;
}
这个没有段错误,但我在编译时收到有关错误使用的投诉mpz_array_init
,并且我的输出中也出现了一堆malloc
错误,以及我想查看的输出。谁能告诉我我的代码在哪里不正确?为什么第一个版本会出现段错误?我按照人们似乎推荐的方式做了。为什么编译器会抱怨
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
我在这里想念什么吗?