gpt4 book ai didi

c - 堆验证失败

转载 作者:太空宇宙 更新时间:2023-11-04 07:08:26 25 4
gpt4 key购买 nike

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

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...

关于c - 堆验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30312644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com