You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言合并两个数组时程序在合并循环处崩溃的问题求助

问题分析与修复方案

你的程序崩溃的核心原因是二级指针的错误使用,在array和display函数中,你错误地直接对二级指针进行下标访问,而没有先解引用得到实际的数组首地址,这会导致读写非法内存,触发崩溃。

错误点详解

  1. array函数中的错误
    原代码里scanf("%d",&a[i]);的a是int**类型,a[i]会被解析为指向int的指针数组元素,而非目标数组的元素地址,直接写入会破坏非法内存空间。
  2. display函数中的错误
    原代码里printf("%d\t",a[i]);同样错误地访问二级指针的下标,导致读取非法内存,引发未定义行为。

修复后的完整代码

// To make two arrays of user Defined Size and merge them in a third array
#include<stdio.h>
#include<stdlib.h>
void array(int**,int);
void ini(int**,int);
void display(int **,int);

int main()
{
    int *a1,*a2,*a3,s1,s2,i,j;
    printf("Enter Size of Array 1\n");
    scanf("%d",&s1);
    printf("Enter Size of Array 2\n");
    scanf("%d",&s2);
    
    ini(&a1,s1);
    ini(&a2,s2);
    ini(&a3,s1+s2);
    
    printf("Enter Elements of Array 1\n");
    array(&a1,s1);
    printf("Array 1:\n");
    display(&a1,s1);
    
    printf("Enter Elements of Array 2\n");
    array(&a2,s2);
    printf("Array 2:\n");
    display(&a2,s2);
    
    // 合并数组的逻辑本身无问题
    for(i=0;i<s1;i++)
    {
        a3[i]=a1[i];
    }
    for(i=0,j=s1;i<s2&&j<s1+s2;i++,j++)
    {
        a3[j]=a2[i];
    }
    
    printf("Merged Array:\n");
    display(&a3,s1+s2);
    
    // 释放动态分配的内存,避免内存泄漏
    free(a1);
    free(a2);
    free(a3);
    
    return 0;
}

void ini(int **a,int s)
{
    *a=(int*)calloc(s,sizeof(int));
}

void array(int **a,int s)
{
    int i;
    int *arr = *a; // 先解引用获取实际数组的首地址
    for(i=0;i<s;i++)
    {
        printf("Enter Element at position %d\n",i+1);
        scanf("%d",&arr[i]);
    }
}

void display(int **a,int s)
{
    int i;
    int *arr = *a; // 先解引用获取实际数组的首地址
    for(i=0;i<s;i++)
    {
        if(i==s-1)
            printf("%d\n",arr[i]);
        else
            printf("%d\t",arr[i]);
    }
}

额外优化建议

  • 增加内存分配检查:calloc可能返回NULL,建议在ini函数或调用后判断指针是否为空,避免空指针操作。
  • 合并数组的第二个循环可简化为for(i=0;i<s2;i++) a3[s1+i] = a2[i];,逻辑更简洁直观。

内容的提问来源于stack exchange,提问作者Lost One

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 05:45:39