gpt4 book ai didi

c++ - 如何出现空输入的 AddressSanitizer 错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:24 30 4
gpt4 key购买 nike

以下代码计算两个相邻元素之间的最大气体。输入 vector 未排序。

class Solution {
public:
int maximumGap(vector<int>& nums) {
int max = 0;
sort(nums.begin(), nums.end());
for(int i = 0; i < nums.size() -1; i++) {
if(nums[i+1] > nums[i] + max) max = nums[i+1] - nums[i];
}
return max;
}
};

但是,如果输入为空(例如 []),它会生成以下错误

AddressSanitizer:DEADLYSIGNAL
=================================================================
==29==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000004 (pc 0x00000040d54a bp 0x7ffe00e1e520 sp 0x7ffe00e1df50 T0)
==29==The signal is caused by a READ memory access.
==29==Hint: address points to the zero page.
#1 0x7fde1d3ab2e0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202e0)

AddressSanitizer can not provide additional info.
==29==ABORTING

可以通过包含以下内容来解决问题:

if(nums.empty()) return 0;

只是想知道错误是如何产生的?我认为对于原始代码,空输入也应该输出 0。

最佳答案

nums.size() 是无符号类型,所以当它为零时,nums.size() - 1 是一个巨大的正数,你的循环将运行。

您可以通过将循环条件重写为:

i + 1 < nums.size()

关于c++ - 如何出现空输入的 AddressSanitizer 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56246906/

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