-PR-
解決済み

ActivePerl がハングアップ

  • 困ってます
  • 質問No.74015
  • 閲覧数140
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

 Perl で、<STDIN>を繰り返し実行するコマンドライン型のプログラムを作りました。
 それをWIn98SEの MS-DOSプロンプト で実行していたのですが、どうも、下記の構文がランダムの確率でハングアップしてしまうようです。

 $ExecuteResult[$CNum] = undef;

 このとき、@ExecuteResult は多次元配列になっており、この下にある $ExecuteResult[$CNum]->[]->[] もいっしょにクリアしたいわけです。
 で、この命令を5~10回ほど繰り返すと、場合によって「メモリがリードになることはできませんでした」というエラーが出てしまいます。ようするに不正領域へアクセスしてしまっているんでしょうが。

 これに関して回避策を知っている方がいらっしゃいましたらご意見をいただきたいと思います。
 よろしくお願いします。

 なお、もし、プログラムのソースを見ていただけるという親切な方がいらっしゃいましたら、こちらを見ていただければと思います。(そんな人いるのかな? うーん(^_^;)
http://www.edit.ne.jp/~deagle/software/se150.lzh
(問題の部分は sql-engine.pl の511行目にあります)
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル10

ベストアンサー率 64% (73/113)

ソース拝見いたしました。力作ですね。
なかなか複雑なので今回の件に絞って言えば、Perl自体がその手のエラー
で異常終了してしまうのは本来あってはならないことですね。
バージョンが最新版(5.6.1.626)でないのなら更新して試してみては
どうでしょう?またエラーメッセージがはっきりわかるのならActiveState
のBugTrackerで既知のバグかどうか検索してみる手段もありますね。

$CNumはどうやらカーソルの種類によってインクリメントされるだけのよう
ですから、不正な値になるとも思えませんし…。
やはりアプリケーション側での対策としては、冗長ではありますが
$ExecuteResult[$CNum] = undef if (defined($ExecuteResult[$CNum]));
と変更しておくぐらいでしょうか。また、ActivePerlの配列の扱いに
疑いがある場合、@ExecuteResultをハッシュの%ExecuteResultに置き換えて、
消去する場合は
delete($ExecuteResult{$CNum});
とする手もあるかと思います。ざっと見たところ@ExecuteResult全体を
シーケンシャルにアクセスしているところはないように思えましたので、
ハッシュ化しても問題ないかと。

なにか参考になりましたら幸いです。
お礼コメント
noname#25358

 返事が遅れてすいません。

 いちおー、Perl 自体は最新です。www.perl.comからソースを落としてきてコンパイルしようかなとも思ったんですが、つい最近システムが飛んで以降、VCをインストールしてないもので(笑)

 とりあえず、別口からリファレンスは逐一デリファレンスしないとメモリが怪しくなる、という情報をいただいて対処はしてみたんですが、こっちの方も併用して試してみたいと思います。
投稿日時 - 2001-05-25 16:41:56
関連するQ&A
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1

お久しぶりです、deagle様。 えっとですね、Perlに限ったことではないのですが、 不正アクセス・・・というエラーを回避するには、 素直にundefを代入する前に、存在するかどうかを チェックしてはどうでしょうか? #Windowsプログラムではこうしますね・・・ ではでは☆ ...続きを読む
お久しぶりです、deagle様。

えっとですね、Perlに限ったことではないのですが、
不正アクセス・・・というエラーを回避するには、
素直にundefを代入する前に、存在するかどうかを
チェックしてはどうでしょうか?
#Windowsプログラムではこうしますね・・・

ではでは☆
お礼コメント
noname#25358

 返事が遅れてすいません(^_^;

 確実に存在するエリアに対するアクセスしかしてないんです(^_^;
 同じ添え字ですでに確保したエリアに対してしかしない動作をしているので。
 メモリをたくさん使うので、それでかなとも考えられるんですが……。
投稿日時 - 2001-05-25 16:35:58


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ