C++ 空输入的AddressSanitizer错误是如何产生的
以下代码计算两个相邻元件之间的最大气体。输入向量未排序C++ 空输入的AddressSanitizer错误是如何产生的,c++,C++,以下代码计算两个相邻元件之间的最大气体。输入向量未排序 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 = nu
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;
}
};
可以通过包括以下内容来解决此问题:
if(nums.empty()) return 0;
只是想知道错误是怎么来的?我认为空输入也应该为原始代码输出0。nums.size()
是无符号类型,因此当它为零时,nums.size()-1
是一个巨大的正数,循环将运行
您可以将循环条件重写为:
i+1
nums.size()
是无符号类型,因此当它为零时,nums.size()-1
是一个巨大的正数,循环将运行
您可以将循环条件重写为:
i+1
Trystd::cout到目前为止,代码看起来是正确的,所以它一定是您没有显示的其他内容。可能是函数调用?请尝试std::cout到目前为止代码看起来是正确的,因此它一定是您没有显示的其他内容。也许是函数调用?
if(nums.empty()) return 0;