ZBLOG

typedef struct ListNode_ { int val; struct ListNode* next; } ListNode; typedef struct{ int size; ListNode** data; }HashMap; int hash(int key,int size) { return key % size; } ListNode* createNode(int val) { ListNode* node...

该报错是 AddressSanitizer(ASan)检测到未知的崩溃,可能源于代码中对未初始化或无效指针进行访问的尝试。

具体来看,错误发生在地址0x602000000050处,程序正在进行一次大小为6152字节的写操作。通过阅读错误信息可以得知,在使用malloc函数分配内存时出现了问题。在HashMapCreate函数中,obj->data数组被分配为一个包含一个ListNode*元素的数组,并且该数组没有被正确地初始化。因此,在向数据结构中添加数据时会导致错误。

修改方法:在HashMapCreate函数中将obj->data数组的大小修改为 obj->size * sizeof(ListNode*),并正确初始化该数组即可:

HashMap* HashMapCreate()
{
    HashMap* obj = (HashMap*)malloc(sizeof(HashMap));
    obj->size = 769;
    obj->data = (ListNode**)malloc(obj->size * sizeof(ListNode*)); // 修改1
    memset(obj->data,0,obj->size * sizeof(ListNode*)); // 修改2
    return obj;
}

注释:这个代码实现了使用哈希表判断给定整数数组是否存在重复元素。其中哈希表实现采用链表法解决哈希冲突。在HashMapPush函数中将元素插入到对应位置即可。但是原始代码中存在问题:在HashMapCreate函数中,申请内存空间后需要使用memset将其清零;同时还需要保证obj->data被正确地初始化为空指针,否则在向数据结构中添加数据时会出现错误。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=2566

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?