「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@357) [中] [解決]
@357■ (#1088) 文字列での乱数初期化で読み込み違反が起きる - 99yen (2009-08-19 09:48) /低 未処理
【症状】
文字列で乱数初期化すると「モジュール 'dnako.dll' のアドレス 01082F68でアドレス 00000000 に対する読み込み違反がおきました。(関数)」というエラーが起きます。
また、0での初期化は意味がないようです。
【再現方法】
"A"で乱数初期化
【要望】実用上問題ありませんが、適切なエラーメッセージを出すか、ハッシュ関数を通した結果などで初期化されるとよいと思います。また、0での初期化にも意味があるとよいと思います。
【バージョン】1.531
【その他】

(#1103) キャストに失敗。関数定義にバグ - U D (2009-08-28 23:53) /低 修正中
キャストに失敗しているようです。
他の関数ではキャストに問題ないようなので調べてみたところ、
なでしこのシステム関数登録処理(AddFunc)でバグがあるようです。
("{整数=?}A"などの引数の型登録が上手くいっていない。)

修正しておきます。

(#1108) 修正。 - U D (2009-08-29 00:38) /低 確認待ち
命令の引数を定義する処理の不具合を修正 (r187)(@357)

これで、文字列型を渡しても正常に整数型にキャストされるので、問題ないはずです。
ちなみに、文字列型を整数型にキャストすると0になるので、
文字列を渡した場合は0で初期化するのと同じことになります。

# あと、0での初期化は「ランダムな初期化」という仕様でいいのではないでしょうか?

確認待ち。

(#1111) 再修正。 - U D (2009-08-29 14:03) /中 確認待ち
命令の引数を文字列から整数に変換したときエラーが起きないように修正。 (r189)(@357)

関係ない所を修正していたので、もう一回コミット。
# なんかDelphiのデバッガがちゃんと変数の値を更新してくれていなかったのか、
# 激しく勘違いしてしまいました、すみません。なんでだろう・・・

ひとまず、整数に変換した時だけで型を保持するようにして、様子を見る。

@今回の変更(メモ)

・なでしこは、AddFuncでシステム命令を登録している
 例)
 AddFunc  ('NOT',    '{整数}A',     291, sys_not,     'A=0のとき1を違えば0を返す','NOT');
・この'{整数}A'の{整数}部分のように型指定をしてあると、
 構文木から命令を実行する際に型チェック&キャストする
・ところがこのとき、型名(VType)を変更していない?
 →今回の修正では、この型名をきちんと「整数(varInt)」に変更するようにした
・型名が変わっていないまま実行すると、再び「文字列→整数」のように変換しようとする
 →実際には既に整数型に変換されているので、ここでエラーが起きていた

以上、何かおかしかったら指摘してください。
問題ないようであれば、他の型(文字列など)のキャストにも同様の修正を加えます。

(#1127) RE:再修正。 - クジラ飛行机 (2009-08-30 15:04) /中 解決
UDさん、修正ありがとうございます。
エラーが出なくなったことを確認しました。
また、コードレベルで見ましたが、まったく問題ありません!
ばっちりです!
修正、ありがとうございました!!

(#1088)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能