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

GnuCOBOL(Open-COBOL)运行代码触发Segmentation fault问题求助

我来帮你定位这个段错误的原因——问题出在你的组项VALS的定义上!

在GnuCOBOL的自由格式(-free)中,组项的下属数据项必须通过缩进明确嵌套关系。你的代码里,VAL-1、VAL-2和RESULT虽然用了05层级号,但没有缩进,导致编译器把它们当成了和VALS同级的独立数据项,而VALS变成了一个没有任何子项的空组。当你执行DISPLAY 'GROUP DATA ITEM = ' VALS时,程序试图访问长度为0的内存区域,直接触发了段错误。

修复步骤:

  1. 正确嵌套组项:把VAL-1、VAL-2、RESULT缩进,让它们成为VALS的子项,同时补充程序结束的标准语句STOP RUN.,修改后的代码如下:
IDENTIFICATION DIVISION.
PROGRAM-ID. Multi.
DATA DIVISION.
WORKING-STORAGE SECTION.
*> Group Value
01 VALS.
    *> Elementary Value
    05 VAL-1 PIC 9(03) VALUE 4.
    05 VAL-2 PIC 9(03) VALUE 3.
    05 RESULT PIC 9(06).
PROCEDURE DIVISION.
MULTIPLY VAL-1 BY VAL-2 GIVING RESULT.
DISPLAY "Result is =" RESULT.
DISPLAY 'GROUP DATA ITEM = ' VALS.
STOP RUN.
  1. 调整编译命令:你的编译命令里-o Multi.o会生成目标文件,应该直接指定可执行文件名,比如:
cobc -free -o Multi ./Multi.cob

执行./Multi就能看到正确输出了。

额外建议:

编译时加上-Wall参数,可以让GnuCOBOL输出更多警告信息,帮你提前发现这类语法/结构问题:

cobc -free -Wall -o Multi ./Multi.cob

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:49:31