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

程序运行报错:name.exe/merge.exe已停止工作,请求故障排查

解决name.exe和merge.exe停止工作的崩溃问题

兄弟,我看你这俩程序都崩得挺突然的,结合你说的“简化后问题出在函数调用上”,咱们从你贴的代码细节入手排查:

首先先把你贴的代码规整一下(注意你输入部分的代码没写完):

#include <stdio.h>
#include <stdlib.h>
#define br 1000
int sort(int *list[],int broi);
int merge(int list1[],int list2[],int broi1,int broi2);
int main() {
    int i,n,m,a1[br],a2[br],a;
    printf("gimme n: ");
    scanf("%d",&n);
    printf("gimme m: ");
    scanf("%d",&m);
    for(i=0;i<n;i++) {
        printf("gimme element %d ot list1: ",i+1);
        // 此处scanf代码不完整
        sca...
    }
    // 后续应该有sort或merge的调用代码,但未贴全
}

大概率是以下几个坑导致的崩溃,你挨个检查:

  • 函数声明和调用的类型不匹配
    你看sort函数的第一个参数是int *list[]——这是个指针数组(二级指针),但如果main里你直接传a1或者a2(一维数组名会退化为一级指针),类型完全不兼容!这种类型不匹配会直接导致内存访问乱套,触发程序崩溃。如果你的sort是用来排序一维数组的,把声明改成int sort(int list[], int broi)或者int sort(int *list, int broi)就对了。

  • merge函数的逻辑隐患
    merge声明返回int,但合并数组通常需要输出结果数组。如果你在merge里犯了这些错:比如直接把结果存在局部数组里然后返回指针(局部变量销毁后指针变野指针)、没给合并后的数组分配足够空间、访问list1/list2时超出了传入的长度范围,都会直接炸掉程序。

  • 输入处理的隐藏问题
    你贴的代码里scanf没写完,如果实际代码里输入读取不完整(比如没正确取到数组元素,导致n/m或者数组里是垃圾值),后续函数调用时用了这些非法值(比如n是负数、或者远大于br=1000导致数组越界),也会触发崩溃。

  • 函数调用的参数传错了
    比如调用merge时把broi1和broi2搞反了,或者传了错误的数组长度,导致函数内部访问数组时越界,直接触发系统的崩溃保护。

给你几个快速调试的小技巧:

  1. 先补全代码,尤其是输入和函数调用的部分,确保逻辑完整;
  2. 对照函数声明和实际调用,检查参数的类型、数量完全匹配;
  3. 在函数开头加个打印语句,看看传入的参数值是不是你预期的(比如n和m是不是你输入的数,数组长度有没有问题);
  4. 用调试器(比如VS的调试模式、GDB)打断点,看崩溃具体发生在函数的哪一行,精准定位内存访问错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:52:34