堆验证失败

HeapValidate Fails

我正在尝试构建这样的结构

typedef struct elements {
    struct elements *next;
    int key;
    struct value *val;
};

typedef struct dict
{
    struct dict_elements **dictionary_head;
};

typedef struct value
{
    int val;
};

结构是这样创建的

box->dictionary_head = (struct elements**)malloc(sizeof(struct elements*) * DICT_SIZE);

然后我插入这样的元素

int DictInsert(struct dictionary_box *box, int key, struct value* value)
{
    temp = (struct elements*) malloc(sizeof(struct elements*));
    temp->key = key;
    temp->val = value;
    temp->next = NULL;
    box->dictionary_head[1] = temp;
}

但是当我以这种方式删除元素时

void DictRemove(struct dictionary_box *box, MHANDLE key)
{ 
    struct elements *next = box->dictionary_head[1]->next;
    free((box->dictionary_head[1])->val);
    free(box->dictionary_head[1]);  <<<-----------HeapValidate Assert failure
    box->dictionary_head[1] = next;
....
}

它崩溃说这个值不在堆上....我做错了什么?我什么都试过了,但我真的不明白我哪里错了。

目前我正在执行一个 Insert() 和一个 Remove(),但我遇到了这个错误。

编辑1: 结构 dictionary_box 框;

void Insert(int value)
{
    struct value* test;
    test =(struct value*)malloc(sizeof(struct value));
    test->val = val;
    DictInsert(&box, value, test);
}

int main(){
    CreateDictionary(&box);
    Insert(1);
    DictRemove(&box, 1);
    DeleteDictionary(&box);
    return 0;
}

您插入元素的代码看起来很可疑:

temp = (struct elements*) malloc(sizeof(struct elements*));
...fill the values...

我认为你想要 sizeof(struct elements),而不是指针的大小:

temp = (struct elements*) malloc(sizeof(struct elements));
...fill the values...