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

代码在VSCode可运行但DevC++5.11运行异常退出问题咨询

DevC++ 5.11中程序运行崩溃的原因与修复方案

首先来看你的代码里的致命问题——在choice == 2的分支中,你声明了一个未初始化的字符指针:

char * user_entry;

然后直接用scanf("%s", user_entry);尝试读取用户输入的学号。这属于典型的未定义行为:user_entry没有指向任何合法的内存空间,写入数据时会直接触发内存访问错误,导致程序崩溃。

为什么VSCode里能正常运行?这是因为不同编译器、运行环境对未初始化内存的处理是随机的——你的VSCode环境中,这个未初始化指针可能恰好指向了一块暂时可用的栈内存,没立刻触发崩溃;但DevC++ 5.11使用的gcc 4.9.2对内存访问的检查更严格,直接触发了程序退出。

修复方案

给user_entry分配足够的内存空间:因为学号是9位字符,加上字符串结束符\0,至少需要10个字符的空间。修改choice == 2分支的代码如下:

else if(choice == 2){
    int userarray[9];
    // 替换未初始化指针为固定大小的字符数组
    char user_entry[10]; 
    printf("Please enter your school no (9 digits):");
    // 可选:添加长度限制,避免输入过长导致缓冲区溢出
    scanf("%9s", user_entry);
    for(int i = 0; i < 9; i++) {
        userarray[i] = user_entry[i] - '0';
    }
    // 后续逻辑保持不变...
}

额外优化建议

  1. 给scanf添加长度限制%9s,可以防止用户输入超过9位时导致数组越界,进一步提升程序稳定性。
  2. 你的冒泡排序函数arraydescending可以优化循环逻辑(比如当某一轮没有交换操作时提前终止排序),不过这不是导致崩溃的核心原因,只是性能优化点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:21:52