Bitvector Struct错误

时间:2017-04-25 18:34:05

标签: c

我正在尝试编写程序以使用标题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

1 个答案:

答案 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;
}