c++ - C++实现合并排序的运行时错误

标签 c++ arrays algorithm sorting mergesort

所以我正在研究 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] 但是对于更长的 vector 输入: 我收到运行时错误消息:AddressSanitizer: SEGV on unknown address 0x61eff7f80674 (pc 0x000000418d91 bp 0x7fff0f0847c0 sp 0x7fff0f0845a0 T0)

最佳答案

你既不初始化i也不初始化j:

 int i,j,count {0};

这只会将count 初始化为0。打开或实际阅读您的编译器警告,因为它会告诉您这一点。

将此更改为:

int i{0};
int j{0};
int count{0};

关于c++ - C++实现合并排序的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56138325/

相关文章:

c++ - '{' 标记之前的预期类名

c++ - OpenGL:计算着色器 - gl_GlobalInvocationID 提供静态输出

java - 将pdf内容写入java.io.Writer

c - 如何在c中声明字符串数组

c++ - 查找组合数量的算法

用于在两个数组中查找公共(public)元素的 Javascript 程序

c++ - 安装? linux屏幕后面有什么?

java - 可全方位扩展的二维数组

c++ - 维基代码?任何人都可以查看和编辑代码的地方?

c++ - C++中的结构指针