
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) フレームワーク「4.8.1」で、[Sub Main]が動かない。助けて下さい 3 2022/11/14 15:40
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- デスクトップパソコン ん~…分からん 7 2022/06/10 10:47
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- デスクトップパソコン 問題が発生したため、PCを再起動する必要があります。エラー情報を収集しています。自動的に再起動します 5 2022/06/02 11:15
- CPU・メモリ・マザーボード Windows11アップデート後の不具合(メモリ不足)について 9 2023/01/04 11:34
- Windows 8 今日パソコンを起動したらブルースクリーンになりました。停止コードはcritical_process_ 1 2022/03/22 23:13
- Visual Basic(VBA) ExcelVBAで質問です。離れた二次元配列を一つにしたい 4 2022/07/26 19:06
- 電子レンジ・オーブン・トースター 電子レンジの非科学的(カルト的)動作の原因について考えられる理由を知りたい 8 2022/11/29 14:47
このQ&Aを見た人はこんなQ&Aも見ています
-
配列をEraseしてもメモリが開放されていない?
Visual Basic(VBA)
-
Redim とEraseの違いは?
Access(アクセス)
-
VBA public変数はどのようなことをしたら解放されますか?
Visual Basic(VBA)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
StrConvでUnicodeに変換出来ない文字
Visual Basic(VBA)
-
6
ReDim PreserveよりもReDimが遅い
Visual Basic(VBA)
-
7
動的配列が存在(要素が有る)か否かを判定できますか?
Visual Basic(VBA)
-
8
エクセル関数で日付かどうかの確認?
Excel(エクセル)
-
9
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
10
VB6 配列を初期化したい
Visual Basic(VBA)
-
11
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
12
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
13
参照設定は2.8と6.0 6.1とどちらにチェッ
その他(Microsoft Office)
-
14
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
15
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
16
読み込みで一行おきに配列に格納
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
銀行ATMの数字キーの配列
-
配列を使わずに、変数名を動的...
-
配列をEraseしてもメモリが開放...
-
【C言語】配列の中に配列を入れ...
-
C# 配列の変数宣言について。
-
C言語 少しの疑問
-
C言語初心者 構造体 課題について
-
C# Listを使わずに2次元配列の...
-
自販機での金銭収受を想定した...
-
テキストファイルから文字列を...
-
配列で格納したものをmsgboxで...
-
2次元配列でエラーがでます。
-
シーケンスの解析に使うclustal...
-
配列とポインタについて。 配列...
-
Functionの戻り値を2次元配列...
-
c++によるジャンケンプログラム
-
キーボードのキー配列について
-
vectorで文字列の配列を使う方法
-
C言語で特定列だけを抽出して配...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
C# Listを使わずに2次元配列の...
-
配列を使わずに、変数名を動的...
-
配列で格納したものをmsgboxで...
-
【速いブラインドタッチ】手を...
-
配列をEraseしてもメモリが開放...
-
ExcelVBAで質問です。離れた二...
-
Redimした動的配列はEraseする...
-
C# 配列の変数宣言について。
-
複数の選択範囲の行番号を個別...
-
VBで構造体の配列を関数に渡す...
-
先頭アドレスとは何ですか?
-
配列の参照渡しで型が一致しま...
-
銀行ATMの数字キーの配列
-
配列を含む構造体の初期値について
-
C言語で特定列だけを抽出して配...
-
unsigned char配列への入力の仕方
-
VB.NET 構造体の配列の検索機能...
-
C++ vectorに配列をプッシュしたい
-
C言語初心者 構造体 課題について
おすすめ情報