MainFrame知识小结(20110925)--cobol中table越界
前几天在测试一个程序的时候,一个CASE本来应该是正常结束的,但却出了个ABEND CODE S0C7(数据异常).检查后发现错误出现在一个名为WS-CCC数据项上,WS-CCC是一个“常量”(COBOL没有常量,这里只是概念上的常量,意思是在程序中不去改变它的值)。正常情况下它在内存中应该是x'F1F0F0F0',实际上却不是如此。
数据项类似于:
05 WS-TABLE OCCURS 30 TIMES.
10 WS-AAA PIC X(4).
10 WS-BBB PIC 9(4).
05 WS-CCC PIC 9(4) VALUE 1000.
COBOL是不会检查TABLE是否越界的。比如上面定义的TABLE是有30个元素的,MOVE 'ABC' TO WS-BBB(31)是不会有任何编译或运行问题的,但却覆盖了跟在TABLE后面的内存区.