LeetCode两个数组的交集提交报错:heap-buffer-overflow问题求助
解决LeetCode「两个数组的交集」提交时堆缓冲区溢出问题
问题情况
本地运行代码完全正常,输出结果也符合预期,但提交到LeetCode后直接触发运行时错误:ERROR: AddressSanitizer: heap-buffer-overflow on address,找不到问题根源。相关截图如下:
- [解决方案代码截图]
- [本地运行结果截图]
- [LeetCode提交报错截图]
常见排查方向
- 数组越界访问:仔细检查代码里所有数组索引操作,比如有没有把循环条件写成
i <= nums1.size()而非i < nums1.size(),或是处理哈希表、集合时边界判断出错。 - 动态内存分配失误:如果手动分配了内存(比如C++中用
new),要确认分配的空间能否容纳结果,有没有出现写入超出分配范围的情况。 - 测试用例覆盖不全:本地测试用例可能过于常规,LeetCode包含极端场景测试,比如空数组、单元素数组、超大长度数组、全重复元素数组等,需要在本地单独测试这些情况。
- 哈希表/集合操作错误:比如遍历哈希表时迭代器使用失误,或是插入、查找操作时的边界处理存在问题。
具体排查步骤
- 先逐一检查所有涉及数组索引的代码,把循环条件里的
<=全部替换为<,确认每个索引范围都合法。 - 如果用动态数组存储结果,要么确认初始化长度足够,要么直接改用支持动态扩容的容器(比如C++的
vector、Java的ArrayList),避免手动内存分配的风险。 - 本地模拟LeetCode的极端测试用例:
- 两个输入数组均为空
- 一个数组为空,另一个包含元素
- 两个数组长度差异极大(比如一个长度为1,另一个为10^5)
- 数组内元素全为重复值
- 查看报错截图中的具体内存地址和调用栈,定位到触发溢出的代码行,重点排查该行附近的内存操作。
内容的提问来源于stack exchange,提问作者Harshvardhan Gupta
相关产品推荐
相关产品推荐

