GnuCOBOL(Open-COBOL)运行代码触发Segmentation fault问题求助
我来帮你定位这个段错误的原因——问题出在你的组项VALS的定义上!
在GnuCOBOL的自由格式(-free)中,组项的下属数据项必须通过缩进明确嵌套关系。你的代码里,VAL-1、VAL-2和RESULT虽然用了05层级号,但没有缩进,导致编译器把它们当成了和VALS同级的独立数据项,而VALS变成了一个没有任何子项的空组。当你执行DISPLAY 'GROUP DATA ITEM = ' VALS时,程序试图访问长度为0的内存区域,直接触发了段错误。
修复步骤:
- 正确嵌套组项:把
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.
- 调整编译命令:你的编译命令里
-o Multi.o会生成目标文件,应该直接指定可执行文件名,比如:
cobc -free -o Multi ./Multi.cob
执行./Multi就能看到正确输出了。
额外建议:
编译时加上-Wall参数,可以让GnuCOBOL输出更多警告信息,帮你提前发现这类语法/结构问题:
cobc -free -Wall -o Multi ./Multi.cob
内容的提问来源于stack exchange,提问作者Zachary Washburn
相关产品推荐
相关产品推荐

