
Visual Basic6(SP5)で開発を行っているものです。
時々、「メモリが"Read"になることができませんでした」と言うエラーメッセージと共にVisual Basicのアプリケーションが終了する不具合が発生します。メモリ操作関連のエラーだろうと社内で指摘されました。
怪しいかと思われるのは、ある動的配列をRedimし、解放する必要が無いのでEraseしていない点です。
動的配列は、RedimしたらEraseしないとエラーの元になり得るのでしょうか? 時間のある方、ご回答願います。
No.3ベストアンサー
- 回答日時:
多分、直接的には関係ないと思われます。
ポインタをまともに扱うことのないVBでは
領域侵害などが発生する機会が少ないからです。
過去に相当大きな空間(200M)をredimで確保したままにしたことがありますが、
ご質問のエラーに遭遇したことはありません。
もし疑うのであれば、memorycopy、Bitbltなどの
メモリ転送APIの方がよほどたちが悪いです。
redimの場合はOSが勝手にアドレス空間を確保してくれるはずなので、
それができていないとすれば重大な障害がある感じがします。
マシンに依存する問題の可能性も捨て切れません。
社内ということなので、この辺りの問題は切り分け済みでしょうが、
参考までに挙げてみました。
回答、ありがとうございます。
No2の方にも指摘されましたが、APIを利用したメモリ転送を行っています。
そして思い起こせば、質問のエラーが起こり始めたのは、そのAPI関数の実行を阻害する可能性のある処理を追加した頃からです。
そのあたりを調べてみます。
No.2
- 回答日時:
> 動的配列は、RedimしたらEraseしないとエラーの元になり得るので
> しょうか?
エラーには必ず原因があるわけですが、原因解明にできるだけ手間を
かけないようにするためにも動的配列やオブジェクト変数などは、
使い終わった時点で私は明示的にクリアしています。
広域変数もなるべく使わないようにし、使う前に必ず明示的に初期化
し、使い終わったらクリアしています。
>「メモリが"Read"になることができませんでした」
意味不明のエラーメッセージですが、意図するところは、
「参照したメモリの内容を読み取ることができませんでした」
です。動的配列がこのエラーの原因となり得るのかはコードを見ない
と何とも言えませんが、よくあるのは API 絡みですね。宣言ミスと
か使い方のミスとか。もし、API を使っているなら確認してみて下さ
い。
ありがとうございました。
今さらになって思うのは、「怪しい」と私自身が思っているなら明示的にEraseしておけばよかっただけかも知れません。
APIは確かに使っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
配列をEraseしてもメモリが開放されていない?
Visual Basic(VBA)
-
Redim とEraseの違いは?
Access(アクセス)
-
VBA public変数はどのようなことをしたら解放されますか?
Visual Basic(VBA)
-
-
4
エクセル関数で日付かどうかの確認?
Excel(エクセル)
-
5
動的配列が存在(要素が有る)か否かを判定できますか?
Visual Basic(VBA)
-
6
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
7
VBA:Openステートメントで開いたCSVファイルの特定行を削除する方法
その他(プログラミング・Web制作)
-
8
ReDim PreserveよりもReDimが遅い
Visual Basic(VBA)
-
9
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
10
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
4勤2休のシフト作成
-
VBでC言語のポインタみたい...
-
capslockの解除の仕方を教えて...
-
Redimした動的配列はEraseする...
-
c言語の __FILE__ について
-
複数のボタンを配列で扱う方法...
-
COBOLのINITIALIZEにあたるもの
-
テキストファイルから文字列を...
-
C言語 少しの疑問
-
本日までの累計を表示させたい!
-
配列
-
C言語でcharの足し算
-
【速いブラインドタッチ】手を...
-
C# 配列の変数宣言について。
-
配列の中身を逆にするために。。。
-
C言語の配列番号が"0"から始ま...
-
C言語のポインタに直接アドレス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
C# Listを使わずに2次元配列の...
-
配列を含む構造体の初期値について
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
【速いブラインドタッチ】手を...
-
テキストファイルから文字列を...
-
ExcelVBAで質問です。離れた二...
-
配列をEraseしてもメモリが開放...
-
メモリの初期値
-
複数の選択範囲の行番号を個別...
-
unsigned char配列への入力の仕方
-
【C言語】配列の中に配列を入れ...
-
VBで構造体の配列を関数に渡す...
-
エラ-メッセ-ジの意味を教え...
-
C# 配列の変数宣言について。
-
C言語 配列の再初期化
-
LGノートPCグラムについて
-
C言語初心者 構造体 課題について
おすすめ情報