我正在尝试编写程序以使用标题BV.h中的这些函数。尝试使用setBit,clrBit,valBit和printV时,我一直收到错误。
我认为它与代码的[pos]部分有关,但我不太确定。
bv.c
//bv.c
#include <stdio.h>
#include "bv.h"
#include <stdlib.h>
bitV* newVec(uint32_t length){
bitV* v = malloc(sizeof(bitV));
(*v).l = length;
return v;
}
void delVec(bitV* v){
free(v);
// *v = NULL;
}
void oneVec(bitV* v){
for(int i = 0;(unsigned)i < (v->l); i++){
(*v).head = 1;
}
}
void setBit(bitV* v, uint32_t pos){
(*v).head[pos] = 1;
}
void clrBit(bitV* v, uint32_t pos){
v->head[pos] = 0;
}
uint8_t valBit(bitV* v, uint32_t pos){
return v->head[pos];
}
uint32_t lenVec(bitV* v){
return v->l;
}
void printV(bitV* v){
for(int i = 0;(unsigned) i < (v->l); i++){
printf("%d\n",valBit(v,i));
}
}
bv.h
// bv.h — Bit Vector interface
# ifndef _BVector
# define _BVector
# include <stdint.h>
typedef struct bitV {
uint8_t *head;
uint32_t l;
} bitV;
bitV *newVec(uint32_t);
void delVec(bitV *);
void oneVec(bitV *);
void setBit(bitV *, uint32_t);
void clrBit(bitV *, uint32_t);
uint8_t valBit(bitV *, uint32_t);
uint32_t lenVec(bitV *);
void printV(bitV *);
# endif
答案 0 :(得分:0)
您的newVec(*)
和delVec(*)
必须有一些分配并释放实际数据。
bitV* newVec(uint32_t length)
{
bitV* v = malloc(sizeof(bitV));
v->l = length;
v->head = malloc(sizeof(uint8_t)*length);
return v;
}
void delVec(bitV* v)
{
if(v->head!=NULL) free(v->head);
v->l = 0;
}