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

C语言以文件大小为行列创建矩阵触发SIGSEGV段错误如何解决

段错误触发原因分析
  • 核心触发点是栈上分配的超大变长数组(VLA)导致栈溢出:
    64位系统下long类型占8字节,两个10KB文件对应的维度均为10240,你申请的二维数组总大小为 (10240+1) * (10240+1) * 8 ≈ 800MB,而操作系统给程序默认分配的栈空间通常仅为1~8MB,完全无法容纳这么大的内存块,栈边界被冲破后直接触发SIGSEGV段错误。
  • 存在潜在风险:你写的calculateDim函数没有校验fopen的返回值,如果目标文件不存在、无读取权限会导致fopen返回NULL,后续fseek操作空指针也会触发段错误,建议补充空指针判断逻辑。
修复建议

不要在栈上申请超大内存,改用堆内存分配即可,参考代码:

// 申请二维数组
long **matrix = malloc((dim1 + 1) * sizeof(long *));
for (long i = 0; i <= dim1; i++) {
    matrix[i] = malloc((dim2 + 1) * sizeof(long));
}

// 使用完成后释放内存避免泄漏
for (long i = 0; i <= dim1; i++) {
    free(matrix[i]);
}
free(matrix);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:15:04