堆验证失败
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...
我正在尝试构建这样的结构
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...