C++ 分段错误:无法访问内存

C++ 分段错误:无法访问内存,c++,segmentation-fault,mergesort,C++,Segmentation Fault,Mergesort,我正在实现合并排序代码。我写的代码是: #include<iostream> using namespace std; void merge(int *A,int i,int k,int j) { int l1,l2,c,d; int B[j - i + 1],ind = 0; l1 = k - i + 1; c = i; l2 = j - k; d = k + 1; while(l1 > 0 && l2 > 0

我正在实现合并排序代码。我写的代码是:

#include<iostream>
using namespace std;

void merge(int *A,int i,int k,int j)
{
    int l1,l2,c,d;
    int B[j - i + 1],ind = 0;
    l1 = k - i + 1; c = i;
    l2 = j - k; d = k + 1;

    while(l1 > 0 && l2 > 0)
    {
        if(A[c] < A[d])
        {
            B[ind] = A[c];
            c++; l1--;
        }
        else
        {
            B[ind] = A[d];
            d++; l2--;
        }
        ind++;
    }
    while(l1 != 0)
    {
        B[ind] = A[c];
        c++; l1--; ind++;
    }
    while(l2 != 0)
    {
        B[ind] = A[d];
        d++; l2--; ind++;
    }
    for(int l = i;l < j - i + 1;l++)
    {
        A[l] = B[l];
    }
}
int mergesort(int *A,int i,int j)
{
    if(i == j)
        return 0;
    int k = (j - i)/2;
    mergesort(A,i,k);
    mergesort(A,k + 1,j);
    merge(A,i,k,j);
    return 0;
}
int main()
{
    int A[] = {1,5,3,4,2,6};
    mergesort(A,0,5);
    for(int i = 0;i < 6;i++)
    {
        cout<<A[i]<<endl;
    }
}
#包括
使用名称空间std;
无效合并(int*A,int i,int k,int j)
{
int l1、l2、c、d;
int B[j-i+1],ind=0;
l1=k-i+1;c=i;
l2=j-k;d=k+1;
而(l1>0&&l2>0)
{
if(A[c]你对中点k的计算是错误的,应该是:

int k=(i+j)/2 ;
这解决了分段错误,但合并逻辑也不正确

int k=(i+j)/2 ;