![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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での Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
6
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
7
【VBA】ファイルパスに半角スペースが入ると、VBAが動かない
Excel(エクセル)
-
8
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
9
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
10
EXCELのVBAで作業ファイルを閉じてもメモリの解放をしなくて困っています
Excel(エクセル)
-
11
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
12
EXCEL VBA で、0から?1から?
Excel(エクセル)
-
13
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
14
VBAで「致命的なエラー」が出ました。どのくらい致命的なんでしょうか?
Access(アクセス)
-
15
VB6のメモリ解放に関して
Visual Basic(VBA)
-
16
置換機能を使わずに先頭に「'」をつける方法
Excel(エクセル)
-
17
array関数で格納した配列の型を変更する
Visual Basic(VBA)
-
18
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
19
DoEventsがやはり分からない
Visual Basic(VBA)
-
20
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列を使わずに、変数名を動的...
-
C言語 配列の長さの上限
-
ExcelVBAで質問です。離れた二...
-
先頭アドレスとは何ですか?
-
C言語初心者 ポインタについて...
-
C# Listを使わずに2次元配列の...
-
VBで動的なメモリの確保
-
unsigned char配列への入力の仕方
-
配列の配列?
-
配列をEraseしてもメモリが開放...
-
【速いブラインドタッチ】手を...
-
プログラムが書けません。
-
C言語で特定列だけを抽出して配...
-
配列の参照渡しで型が一致しま...
-
配列で格納したものをmsgboxで...
-
C言語プログラミングで数あてゲ...
-
Redimした動的配列はEraseする...
-
C言語で巨大配列を作るにはどう...
-
テキストファイルから文字列を...
-
VBで構造体の配列を関数に渡す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
unsigned char配列への入力の仕方
-
ExcelVBAで質問です。離れた二...
-
配列の参照渡しで型が一致しま...
-
パイソンの
-
C# Listを使わずに2次元配列の...
-
C言語で特定列だけを抽出して配...
-
複数の選択範囲の行番号を個別...
-
【C言語】配列の中に配列を入れ...
-
メモリの初期値
-
VBで構造体の配列を関数に渡す...
-
Excel、VBAのユーザーフォーム...
-
配列をEraseしてもメモリが開放...
-
2次元配列を戻り値とする関数?
-
【速いブラインドタッチ】手を...
おすすめ情報