合并排序的合并功能的分段错误
Segmentation Fault for Merge function of Merge Sort
我的任务是实现合并排序的合并功能algorithm.My想法是创建一个辅助数组来存储排序的values.I维护了2个指针,一个用于左排序数组,另一个对于右排序数组。
我很难弄清楚为什么会出现分段错误?
void merge(int arr[], int l, int m, int r)
{
int temp[r-l+1];int count=0;
int *ptr1=(int*) malloc(sizeof(int));
int * ptr2=(int*) malloc(sizeof(int));
ptr1=&arr[l];
ptr2=&arr[m+1];
while(ptr1!=(&arr[m+1]) && ptr2!=NULL)
{
if(*ptr1>=*ptr2)
{
temp[++count]=*ptr2;
ptr2++;
}
else
{
temp[++count]=*ptr1;
ptr1++;
}
}
if(ptr1==&arr[m+1])
{
while(ptr2)
{
temp[++count]=*ptr2;
ptr2++;
}
}
if(ptr2==NULL)
{
while(ptr1!=&arr[m+1])
{
temp[++count]=*ptr1;
ptr1++;
}
}
for(int i=0;i<r-l+1;i++)
{
arr[i]=temp[i];
}
}
输入:
2
5
4 1 3 9 7
10
10 9 8 7 6 5 4 3 2 1
预期输出:
1 3 4 7 9
1 2 3 4 5 6 7 8 9 10
我的Output:Segmentation错
首先,malloc 的这些行不是必需的
int *ptr1=(int*) malloc(sizeof(int));
int * ptr2=(int*) malloc(sizeof(int));
ptr1=&arr[l];
ptr2=&arr[m+1];
并且可以改为
int *ptr1=&arr[l];
int * ptr2=&arr[m+1];
另一个问题是 NULL
对 ptr2
的测试不起作用,因为最后一个元素后面的地址不是 NULL
。
我的任务是实现合并排序的合并功能algorithm.My想法是创建一个辅助数组来存储排序的values.I维护了2个指针,一个用于左排序数组,另一个对于右排序数组。
我很难弄清楚为什么会出现分段错误?
void merge(int arr[], int l, int m, int r)
{
int temp[r-l+1];int count=0;
int *ptr1=(int*) malloc(sizeof(int));
int * ptr2=(int*) malloc(sizeof(int));
ptr1=&arr[l];
ptr2=&arr[m+1];
while(ptr1!=(&arr[m+1]) && ptr2!=NULL)
{
if(*ptr1>=*ptr2)
{
temp[++count]=*ptr2;
ptr2++;
}
else
{
temp[++count]=*ptr1;
ptr1++;
}
}
if(ptr1==&arr[m+1])
{
while(ptr2)
{
temp[++count]=*ptr2;
ptr2++;
}
}
if(ptr2==NULL)
{
while(ptr1!=&arr[m+1])
{
temp[++count]=*ptr1;
ptr1++;
}
}
for(int i=0;i<r-l+1;i++)
{
arr[i]=temp[i];
}
}
输入: 2
5
4 1 3 9 7
10
10 9 8 7 6 5 4 3 2 1
预期输出:
1 3 4 7 9
1 2 3 4 5 6 7 8 9 10
我的Output:Segmentation错
首先,malloc 的这些行不是必需的
int *ptr1=(int*) malloc(sizeof(int));
int * ptr2=(int*) malloc(sizeof(int));
ptr1=&arr[l];
ptr2=&arr[m+1];
并且可以改为
int *ptr1=&arr[l];
int * ptr2=&arr[m+1];
另一个问题是 NULL
对 ptr2
的测试不起作用,因为最后一个元素后面的地址不是 NULL
。