私が書いたビット配列のものを書き直そうとしているのですが、追加したかったことの1つは、ビット配列に値を簡単に設定できるようにする機能です。現在、私のビット配列は次のようになっています。
typedef struct{
int length;
char bitarray[];
}BitArray;
関数を書き込もうとしています:
void initBitArray(BitArray * b, int numBits, int initVal);
length を numBits に、bitarray を numBits/8 + 1 の長さの char の配列に設定し、各 char の値は initVal です。私が問題を抱えている唯一の部分は、bitarray の値を設定することです。これは宿題でもなんでもありません。趣味のコードをもっときれいにしようとしていただけです。これは私がやろうとしたことです:
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: ========