c++ - 在 C 中合并 2 个排序数组

标签 c++ c sorting array-merge array-algorithms

我正在编写代码来合并 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

如何修复

最佳答案

问题是您没有提供任何应该放置合并信息的空间。您为 sorted 参数提供了一个未初始化的指针 c,它在函数内部被取消引用,导致未定义的行为。

要解决此问题,请传递一个具有足够容量的数组来容纳合并数组的元素:

int a[]={7, 15, 20};
int b[] = {8, 12, 19, 32};
int c[7];
merge(a, b, c, 3, 4);

关于c++ - 在 C 中合并 2 个排序数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30634048/

相关文章:

javascript - 对对象数组进行排序(输出数据但不按顺序)

java - 对两个平行数组进行排序

c++ - Qt QString::toDouble() 返回 int 0

c++ - 矩阵 vector 乘法 CCS c++

c++ - lambda 表达式中没有匹配的成员函数错误?

c++ - Win API 绝对起点 - 从哪里开始?

c - _tzset 和 x 字母时区名称

c++ - (x < 0) 或 (x == -1) 哪个更快?

c - 为什么这个接口(interface)使用 `typedef void * COMPLEX`?

matlab - 在 MATLAB 中对条形图进行排序