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

如何修复

最佳答案

问题是,您没有提供任何应放置合并信息的空间。您为c参数提供了一个未初始化的指针sorted,该指针在函数内部被取消引用,从而导致未定义的行为。
若要解决此问题,请传递一个具有足够容量的数组来保存合并数组的元素:

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/

相关文章:

php - Javascript之后获取HTML-服务器应用程序

objective-c - 如何交换大到主机 int8 号码?

sorting - Redis:在alpha中对哈希 "fields"进行排序

java - 选择排序和冒泡排序 - 如何计算比较和数字交换的次数?

python - 如何通过python从GDB中的内存地址获取对象

c++ - 跨平台代码组织

c++ - 如何使用前值和后值对 vector 进行变换

c - 使没有元素的基于数组的程序正常工作

c - 在C中将指针传递给指针的性能

java - 双链表上的QuickSort(不正确的输出)