Clion(Apple Silicon)下main函数创建4500万元素二维数组报错问题
问题根因解释
你遇到的报错本质是栈溢出,核心是C语言不同内存分区的大小限制差异:
- 首先计算你定义的
dp数组占用内存:单int按4字节算,总大小为(1e5+5) * 450 * 4 ≈ 180MB。 - 函数内部定义的局部变量默认分配在栈内存区域,常规操作系统对单个进程的栈内存限制普遍只有8MB~16MB,远小于你需要的180MB,空间不足触发栈越界,就会抛出
SIGSEGV段错误,对应你看到的退出码139。 - 全局作用域的变量分配在静态存储区,该区域的内存配额远高于栈,常规场景下可以支持数GB的占用,180MB完全在允许范围内,因此移动到全局后程序可以正常运行。
如果不想把变量放到全局,也可以选择用malloc动态申请堆内存,堆内存的大小限制同样远高于栈,适合申请大内存块。
内容的提问来源于stack exchange,提问作者Intolighter
相关产品推荐
相关产品推荐

