プチコン3号&BIGまとめWiki

エラーメッセージ

パンくずリスト

プログラムを書いていると、エラーが出ることがあります。エラーの内容をしっかり理解して、動くプログラムを作っていきましょう!!

エラーメッセージ一覧

ver 3.1.0で確認

ERRNUM内容説明
1Internal Errorプチコン3号の内部エラー
2Illegal Instructionプチコン3号の内部エラー
3Syntax errorプログラムが間違っている
4Illegal function call関数・命令のパラメータ数が合わない
5Stack overflow再帰呼び出し等によって内部スタックが溢れた
6Stack underflow?
7Divide by zero数値を0で割った
8Type mismatch関数・命令・変数の型が合わない
9Overflow値が大きすぎる
10Out of range関数・命令の値が範囲外である
11Out of memoryメモリが不足している
12Out of code memoryプログラムが長すぎる
13Out of DATAデータが足りない
14Undefined label*1指定したラベルは存在しない
15Undefined variable *2指定した変数は存在しない
16Undefined function *3指定した関数・命令は存在しない
17Duplicate labelラベルが多重定義されている
18Duplicate variable変数が多重定義されている
19Duplicate function *4関数・命令が多重定義されている
20FOR without NEXTFOR に対応する NEXT がない
21NEXT without FORNEXT に対応する FOR がない
22REPEAT without UNTILREPEAT に対応する UNTIL がない
23UNTIL without REPEATUNTIL に対応する REPEAT がない
24WHILE without WENDWHILE に対応する WEND がない
25WEND without WHILEWEND に対応する WHILE がない
26THEN without ENDIFIF に対応する ENDIF がない
27ELSE without ENDIFELSE に対応する ENDIF がない
28ENDIF without IFENDIF に対応する IF がない
29DEF without ENDDEF に対応する ENDがない
30RETURN without GOSUBRETURN があるのに GOSUB がない
31Subscript out of range配列変数の添字が範囲外である
32Nested DEFDEF の中に DEF がある
33Can't continueプログラムを再開出来ない
34Illegal symbol string *5ラベル文字列が不正
35Illegal file format*6ファイルフォーマットが不正
36Mic is not availableマイク機能が無効
37Motion sensor is not availableジャイロセンサー機能が無効
38Use PRGEDIT before any PRG functionPRGEDIT を実行する前に PRG 系命令を使用した
39Animation is too longアニメーションデータが長すぎる
40Illegal animation dataアニメーションデータが不正
41String too long文字列が長すぎる
42Communication buffer overflowワイヤレス通信バッファが溢れた
43Can't use from direct modeダイレクトモードでは使えない命令
44Can't use in programプログラム内では使えない命令
45Can't use in tool program *7SMILE ボタンに登録したプログラムから、この命令は利用できない
46Load failedファイルの読み込みに失敗した
47Illegal MMLMML コマンドが間違っている

ver 3.2.0で確認

ERRNUM内容説明
48Uninitialized variable used *8未初期化の変数を参照した

ver 3.3.0で確認

ERRNUM内容説明
49Protected resource保護されたリソースを変更しようとした
50Protected file保護されたファイルを変更しようとした
51DLC not found該当のDLCが購入されていない

ver 3.5.0で確認

ERRNUM内容説明
52Incompatible statement現在の互換モードでは使用できない
53Without CALL?
54Array is too largeSAVE で保存しようとした配列変数のサイズが大きすぎる
 

エラーの具体的な発生原因

エラーの主な原因を解説します。

Internal Error

  • プチコン3号の内部エラーです。

ラベルに空文字列を指定すると発生します。GOSUBRESTORE も同様です。

  1. GOTO ””
 

Illegal Instruction

  • プチコン3号の内部エラーです。

GOSUBで別スロットに飛んだあと、EXEC等で呼び出し元のスロットを上書きすると発生します。

 

SLOT0:

  1. USE 1
  2. GOSUB ”1:@1”

SLOT1:

  1. @1
  2. EXEC ”PRG0:HOGE” ’空でないファイルなら何でもよい
  3. RETURN
 

Syntax error

  • 定義されていない命令や関数、演算子などを使用した時に発生します。
  • その他、構文に関する最も一般的なエラーです。
例1
  1. HELLO

この時点では HELLO は有効な変数名、命令名ではありません。

例2
  1. $$$$$$

解読できない根本的な文法の間違いがあるプログラムにもこのエラーが発生します。

 

Illegal function call

  • 命令や関数の呼び出し方が間違っている場合に発生します。
  1. COLOR 1,2,3
  2. ACLS 1

COLOR は1個または2個の引数を渡す命令だが、ここでは3個の引数が渡されているのでエラーになります。
また、ACLS は、引数を指定しないか、指定するときは3個の引数を指定しなければなりませんが、ここでは引数は1個しかありません。

解決策
  • ヘルプなどを見て、引数を正しく指定しましょう。
バグ?仕様?

ファイル読み込みや保存の時に、ファイル名に「NUL」「AUX」「CON」「COM1〜4」を指定すると、Illegal function callが発生します。

  1. LOAD ”PRG0:NUL”

ファイルが存在してもしなくてもエラーになります。
なお、簡易ロードや簡易セーブ、FILE MENUからの操作はできます。

 

Stack overflow

  • 再帰呼び出しによってスタックがあふれたとき発生します。
    • 再帰呼び出しとは、DEF で定義している命令や関数を、定義している中で呼び出すことです。
    • 再帰呼び出しをうまく使うと、とてもシンプルに組めることがありますが、単に再帰呼び出しすると無限に呼び出し続けてしまいます。
    • 再帰呼び出しには内部のスタックと呼ばれるメモリ領域が必要です。無限に再帰呼び出しするとスタックがあふれてしまうので、結果としてエラーとなります。
  1. DEF TEST
  2.  WHILE TRUE
  3.   TEST ’TESTを再度呼び出す
  4.  WEND
  5. END
  6. TEST

しばらく経つとエラーが発生します。

解決策

再帰呼び出しの際は、適切な条件を設定して無限に呼び出すことがないように注意しましょう。 以下は再帰呼び出しで数学の階乗を求める例です。きちんと IF で適切な条件が設定されています。

  1. DEF F(N)
  2.  IF N==0 THEN RETURN 1
  3.  RETURN F(N−1)*N
  4. END
 

Stack underflow

  • スタックが不足している場合に発生します。
  • 発生条件は不明となっています。
 

Divide by zero

  • 数値を0、あるいは0に限りなく近い数値で割ったときに発生します。
  1. PRINT ”3/0=”;3/0

数値を0で割っているのでエラーとなる。

解決策

数値を0で割るかもしれない部分があったら、割る数が0かどうかチェックする IF 文を加えておきましょう。

 

Type mismatch

  • 値の型があっていない時に発生します。
    • 命令や関数に渡す引数の型が合っていない。
    • 演算子の左、または右の式の型が合っていない
例1
  1. A=”HELLO”
  2. B$=123

数値変数には数値を、文字列変数には文字列をしなければなりません。

例2
  1. COLOR ”BLUE”

命令に渡す引数の型が合っていない。 COLOR には数値変数を渡さなければなりません。

バグ

左を文字列、右を数値として比較(== != < > <= >=)すると3が返るもので、ユーザーによって発見されました。
本来のところならば Type mismatch エラーとなるべきですが、この方法を使用して変数の型をチェックするプログラム事例もあります。また、この仕様は ver 3.6.3 現在も変更されていません。

  1. VAR A=−100
  2. PRINT 10>0 ’1
  3. PRINT A>0 ’0
  4. PRINT ”TEST”>0 ’3
 

Overflow

  • 演算結果が大きすぎます。
 

Out of range

  • 命令、関数の引数の値が範囲外であるときに発生します。
  1. COLOR 100

COLOR には0〜15の値を指定しなければなりませんが、100が指定されています。

 

Out of memory

  • メモリーが足りなくなったとき発生します。
  • 特に、巨大な要素数の配列変数を宣言しようとすると発生します。
  1. DIM TEST[10000000]
解決策

要素数を減らしましょう。

以降編集中

コメント

ご指摘、ご要望、ご感想があればお書きください。

  • 初心者 : RETURN without GOSUB ってなんですか? (2018/03/28 (水) 15:52:22)
  • みどり : 「RETURNが無いGOSUBがあります」と言う意味です。 (2018/03/28 (水) 19:49:44)
  • moi : 逆ですね。RETURNはGOSUBで飛んできた位置へ戻る命令です。(別の場合もある)GOSUBで飛んできてないのに戻れと言われたらどこに行けばいいのか分からなくなりますよね。つまりそういうことです。長文失礼しました。 (2018/03/28 (水) 21:02:51)
  • Ryou Tanpo : RETURN without GOSUB は GOSUB がない RETURN のことです。GOSUBGOTO と違って、ジャンプした先に RETURN があると元のところに戻ることができます。逆に言えば、GOSUB がないと、どこに戻ればいいかわからない。この場合に発生するエラーです。 (2018/03/29 (木) 09:36:34)
  • Ryou Tanpo : 「違います」という言い方はちょっと言われた側ががっかりすると思います。 (2018/03/29 (木) 09:37:16)
  • Ryou Tanpo : ちなみに、DEF 内での RETURN は別の働きをするため例外となっています (2018/03/29 (木) 09:38:04)
  • 初心者 : おお、ありがとうございます! (2018/03/31 (土) 09:36:59)
  • moi : 大変失礼いたしました。 (2018/07/31 (火) 12:10:38)
  • Na : Illegal Instructionを発生させました→http://petitverse.hosiken.jp/community/petitcom/topic/?read=1326 (2019/10/31 (木) 19:16:01)

メニュー 【3号】

ヘルプ

リンク

最近の更新

最近の人気ページ

オンライン情報

  • 現在同時に 8 人がこのサイトを見ています
  • このページはこれまでに 2385 回、本日は 3 回、昨日は 1 回閲覧されました

ページの先頭に戻る

*1 GOTO 、 GOSUB 、 RESTORE などにより発生可能
*2 VAR により発生可能
*3 CALL により発生可能
*4 ユーザー関数ではなくユーザー命令の定義でも発生
*5 ラベル文字列の @ がないなど
*6 リソースを間違えた時などにはっせい
*7 例えば、 COMMON など
*8 関数・命令が値を返していない時や、省略された引数を参照した時に発生する

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.048 秒 | このページの最終更新 : 2019/11/21 (木) 22:28:03 (24d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30