该报错是 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被正确地初始化为空指针,否则在向数据结构中添加数据时会出现错误。