on size; pl/1 怎么使用
时间: 2024-03-11 11:46:42 浏览: 18
在 PL/1 中,ON SIZE 是一个异常处理语句,用于处理存储器溢出异常。当程序运行时,如果申请的存储器超出了计算机可用的存储器范围,则会发生存储器溢出异常。为避免程序因此而崩溃,可以使用 ON SIZE 语句来捕获并处理这个异常。
以下是一个使用 ON SIZE 语句的示例:
```
DCL PTR POINTER;
DCL I INTEGER;
PTR = GETMAIN(100000);
ON SIZE;
DO I = 1 TO 10000;
PTR(I) = I;
END;
FREE PTR;
```
在这个例子中,使用 GETMAIN 语句申请了 100000 个字节的存储器,并将其赋值给 PTR 指针变量。然后使用 DO 循环向 PTR 指针指向的存储器中写入数据,当写入数据的数量超过了申请的存储器大小时,会发生存储器溢出异常。但是由于设置了 ON SIZE 语句,程序会在发生异常时跳转到 ON SIZE 语句中,并执行其中的代码,这里是使用 FREE 语句释放 PTR 指针所指向的存储器。最后程序会正常结束,而不是崩溃退出。
需要注意的是,在使用 ON SIZE 语句时,必须确保在语句中处理异常,否则程序仍然会崩溃退出。同时,PL/1 中的存储器管理是手动管理的,因此需要使用 GETMAIN 和 FREEMAIN 语句手动申请和释放存储器,否则也会发生存储器溢出异常。
相关问题
ON SIZE; PL/1 怎么使用
在 PL/1 中,ON SIZE 是一个异常处理语句,用于处理存储器溢出异常。当程序运行时,如果申请的存储器超出了计算机可用的存储器范围,则会发生存储器溢出异常。为避免程序因此而崩溃,可以使用 ON SIZE 语句来捕获并处理这个异常。
以下是一个使用 ON SIZE 语句的示例:
```
DCL PTR POINTER;
DCL I INTEGER;
PTR = GETMAIN(100000);
ON SIZE;
DO I = 1 TO 10000;
PTR(I) = I;
END;
FREE PTR;
```
在这个例子中,使用 GETMAIN 语句申请了 100000 个字节的存储器,并将其赋值给 PTR 指针变量。然后使用 DO 循环向 PTR 指针指向的存储器中写入数据,当写入数据的数量超过了申请的存储器大小时,会发生存储器溢出异常。但是由于设置了 ON SIZE 语句,程序会在发生异常时跳转到 ON SIZE 语句中,并执行其中的代码,这里是使用 FREE 语句释放 PTR 指针所指向的存储器。最后程序会正常结束,而不是崩溃退出。
需要注意的是,在使用 ON SIZE 语句时,必须确保在语句中处理异常,否则程序仍然会崩溃退出。同时,PL/1 中的存储器管理是手动管理的,因此需要使用 GETMAIN 和 FREEMAIN 语句手动申请和释放存储器,否则也会发生存储器溢出异常。
ON SIZE; PL/1 怎么使用 请举例说明
在 PL/1 编程语言中,ON SIZE; 语句用于捕获存储器溢出异常,以防止程序因为存储器不足而崩溃。以下是一个简单的例子,演示了如何使用 ON SIZE; 语句:
```
DCL MYARRAY(100000) CHAR(10);
ON SIZE;
MYARRAY = 'Hello, World!'; /* 试图向 MYARRAY 中写入数据 */
PUT SKIP LIST('程序正常结束');
```
在这个例子中,我们声明了一个包含 100000 个元素的字符数组 MYARRAY,并试图向其中写入数据。由于该数组太大,超出了计算机可用的存储器范围,因此会发生存储器溢出异常。然而,在程序中设置了 ON SIZE; 语句,该语句将捕获该异常,并执行其后的代码。在这个例子中,我们打印了一条消息,表示程序正常结束。如果没有设置 ON SIZE; 语句,则程序将崩溃退出。
需要注意的是,在使用 ON SIZE; 语句时,必须确保在语句中处理异常,否则程序仍然会崩溃退出。同时,PL/1 中的存储器管理是手动管理的,因此需要手动申请和释放存储器,否则也会发生存储器溢出异常。