我正在尝试重写我写的位数组,我想添加的一件事是一个函数,它可以很容易地设置位数组中的值。现在,我的位数组看起来像这样:
typedef struct{
int length;
char bitarray[];
}BitArray;
我正在尝试编写一个函数:
void initBitArray(BitArray * b, int numBits, int initVal);
将长度设置为 numBits,将 bitarray 设置为 numBits/8 + 1 长的字符数组,每个字符都有一个值 initVal。我唯一遇到的问题是设置位数组的值。这不是作业或任何东西,我只是想让一些爱好代码更漂亮。这就是我试图做的:
void initBitArray(BitArray * b, int numBits, int initVal){
char foo[numBits/8 + 1];
b->bitarray = foo;
int i;
for (i=0; i<numBits/8 + 1; ++i){
b->bitarray[i]=val;
}
b->length = numBits;
return;
}
显然这不起作用:p
我试过这个:
void initBitArray(BitArray * b, int numBits, int initVal){
b = (BitArray *)realloc( b, sizeof(b) + numBits/8 + 1);
b->length = numBits;
int i;
for (i=0; i< (b->length); ++i){
b->bitarray[i]=initVal;
}
return;
}
它编译但给我一个运行时错误?
*** glibc detected *** ./prog: realloc(): invalid old size: 0xbfe573f0 ***
======= Backtrace: =========
/lib/libc.so.6[0xb76c0fd4]
/lib/libc.so.6[0xb76c4a29]
/lib/libc.so.6(realloc+0x107)[0xb76c5657]
/lib/libc.so.6(realloc+0x3c)[0xb76c558c]
./prog[0x8048556]
./prog[0x80483f1]
======= Memory map: ========