>98
ビットじゃなくてバイトを確保してたり、確保した領域の先頭しか使ってなかったりわけわからんが、

int *flags = (int *)calloc(numOfFlags/(sizeof(int)*8)+1, sizeof(int));
flags[flagNum/(sizeof(int)*8)] |= 1 << flagNum % (sizeof(int)*8);
if(flags[flagNum/(sizeof(int)*8)] & 1 << flagNum % (sizeof(int)*8)) foo;

こんな感じのことがしたいのか?