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

C语言数组内存分配问题:读取1050个数字时程序崩溃

问题分析与解决

崩溃原因

你代码里的int array[length];是变长数组(VLA),它在程序的栈(stack)内存区域分配空间。栈的默认容量通常很小(比如Windows默认1MB,Linux默认8MB),当需要存储的元素数量过多时,栈空间会被耗尽,触发栈溢出,直接导致程序崩溃。1050个int元素本身仅占约4KB,但可能你的运行环境栈空间更小,或是栈上还有其他变量占用了空间,刚好达到这个数量时就触发了溢出。

解决方案

方案1:使用堆内存分配(推荐)

堆内存的容量远大于栈,适合存储大量数据。用malloc在堆上分配内存,使用完后用free释放,避免内存泄漏。修改后的代码如下:

#include <stdio.h>
#include <stdlib.h>

int main() {

    int length;
    scanf("%d", &length);
    printf("\nLength = %d\n", length);

    // 在堆上分配内存,长度为length个int的大小
    int *array = malloc(length * sizeof(int));
    // 必须检查内存分配是否成功
    if (array == NULL) {
        printf("内存分配失败\n");
        return 1;
    }

    for (int i = 0; i < length; i++) {
        scanf("%d", &array[i]);
    }

    printf("\nAll data are scanned\n");

    for (int i = 0; i < length; i++) {
        printf("%d, ", array[i]);
    }

    // 释放堆内存,避免内存泄漏
    free(array);
    return 0;
}

方案2:调整栈大小(不推荐)

如果一定要使用栈上的变长数组,可以通过编译器参数调整栈的容量,但这种方式是平台相关的,会降低程序的可移植性。比如GCC编译器可以添加-Wl,--stack=10485760参数(指定栈大小为10MB),但仅适用于Windows环境;Linux下栈大小限制通常需要通过系统命令修改,操作更复杂。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:45:49