因此,我正在研究Leetcode 912上的问题。这是一个简单的问题,即以升序对数组进行排序。我只是要遍历所有排序算法。但是,在进行合并排序时,我编写了此算法,它显示了运行时错误,如下所示。通过了一些简单的测试用例,其中包含6或10个整数。但是涉及到更长的测试用例时,会发生运行时错误。任何人都知道我的代码的哪一部分可能导致这种情况?提前非常感谢!
void mergesort(vector <int> &nums) {
int length=nums.size();
if (length<2)
{
return ;
}
int mid= length/2;
vector <int> left;
vector <int> right;
for (int x=0;x<mid;x++)
{
left.push_back(nums[x]);
}
for (int y=0;y<length-mid;y++)
{
right.push_back(nums[y+mid]);
}
mergesort(left);
mergesort(right);
merge(left,right,nums);
}
void merge(vector <int>& left,vector <int>& right,vector <int>& nums){
int i,j,count {0};
int l1=left.size();
int l2=right.size();
while (i<l1&&j<l2)
{
if (left[i]<right[j])
{
nums[count]=left[i];
count++;
i++;
}
else
{
nums[count]=right[j];
count++;
j++;
}
}
while (i<l1)
{
nums[count]=left[i];
count++;
i++;
}
while (j<l2)
{
nums[count]=right[j];
count++;
j++;
}
}
vector<int> sortArray(vector<int>& nums){
mergesort(nums);
return nums;
}
我通过了测试用例,如:[5,2,3,1] 但是对于更长的向量输入: 我收到运行时错误消息:AddressSanitizer:未知地址0x61eff7f80674(pc 0x000000418d91 bp 0x7fff0f0847c0 sp 0x7fff0f0845a0 T0)上的SEGV
答案 0 :(得分:2)
您不初始化i
或j
:
int i,j,count {0};
这只会将count
初始化为0
。打开或实际阅读您的编译器警告,因为它会告诉您这一点。
将此更改为:
int i{0};
int j{0};
int count{0};