在 C 中合并 2 个排序数组
Merge 2 sorted arrays in C
我正在编写合并 2 个排序数组的代码,代码如下
void main()
{
int a[]={7};
int b[] = {8};
int ret;
int *c;
merge(a,b,c,1,1);
}
void merge(int *a, int *b,int *sorted, int i, int j)
{
int c1,c2,k=0;
c1=0;
c2=0;
for(k=0;c1<i && c2< j;k++)
{
if(a[c1]<b[c2])
sorted[k]=a[c1++];
else
sorted[k]=b[c2++];
}
while(c1<i)
sorted[k++]=a[c1++];
while(c2<j)
sorted[k++]=b[j++];
}
当 运行 此代码程序停止并且我得到以下异常时
Problem Event Name: APPCRASH
Application Name: merge.exe
Application Version: 0.0.0.0
Application Timestamp: 556fb91c
Fault Module Name: merge.exe
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 556fb91c
Exception Code: c0000005
Exception Offset: 00001739
OS Version: 6.1.7601.2.1.0.768.3
Locale ID: 2057
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
如何修复
问题是您没有提供任何 space 应该放置合并信息的地方。您为 sorted
参数提供了一个未初始化的指针 c
,它在函数内部被取消引用,导致未定义的行为。
要解决此问题,请传递一个具有足够容量的数组来容纳合并数组的元素:
int a[]={7, 15, 20};
int b[] = {8, 12, 19, 32};
int c[7];
merge(a, b, c, 3, 4);
我正在编写合并 2 个排序数组的代码,代码如下
void main()
{
int a[]={7};
int b[] = {8};
int ret;
int *c;
merge(a,b,c,1,1);
}
void merge(int *a, int *b,int *sorted, int i, int j)
{
int c1,c2,k=0;
c1=0;
c2=0;
for(k=0;c1<i && c2< j;k++)
{
if(a[c1]<b[c2])
sorted[k]=a[c1++];
else
sorted[k]=b[c2++];
}
while(c1<i)
sorted[k++]=a[c1++];
while(c2<j)
sorted[k++]=b[j++];
}
当 运行 此代码程序停止并且我得到以下异常时
Problem Event Name: APPCRASH
Application Name: merge.exe
Application Version: 0.0.0.0
Application Timestamp: 556fb91c
Fault Module Name: merge.exe
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 556fb91c
Exception Code: c0000005
Exception Offset: 00001739
OS Version: 6.1.7601.2.1.0.768.3
Locale ID: 2057
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
如何修复
问题是您没有提供任何 space 应该放置合并信息的地方。您为 sorted
参数提供了一个未初始化的指针 c
,它在函数内部被取消引用,导致未定义的行为。
要解决此问题,请传递一个具有足够容量的数组来容纳合并数组的元素:
int a[]={7, 15, 20};
int b[] = {8, 12, 19, 32};
int c[7];
merge(a, b, c, 3, 4);