お世話になります
VB6のメモリ解放に関して、以下を参考に下記のコードで試したのですが、
コンパイルエラーで「配列には割り当てられません」となってしまいます。
http://oshiete.goo.ne.jp/qa/3372573.html
違いは宣言の型がStringかLongしかないと思うのですが、
なにが悪いのか教えていただけないでしょうか
******* 以下 ソース
Dim wProcDat() As Long
ReDim wProcDat(1 To 1000, 1 To 768)
中略
Set wProcDat = Nothing
No.4
- 回答日時:
#補足にすぎませんが
NothingはObjectの場合だけですね。配列はErase()で初期化します。
EraseでDim時の状態に戻ります。静的配列でもできます。
そして・・・
VB6やVBAの場合、ガベージコレクションが自動的にメモリを解放してくれるので、明示的にメモリ解放する必要はあまりナイかと。解放する癖つけた方がいいのは確かですが。
------
・Eraseしなくても解放されます
→ 関数を抜ける時に未使用のメモリが解放されるため、メモリリークの心配はほとんどありません。
・Eraseしても即解放されるわけではない
→ ガベージコレクション対象にセットされるだけで、たいていは関数抜ける時解放されるみたいです。結局メモリ使用量減りません(※)。
------
リンク先はそーいうコト(※)かと。MsgBoxでメモリ増えるとか謎ですし、MsgBox表示でプログラム止まる際にガベージコレクション走りそうですが・・・バージョンによる違いなのかな。。。
回答ありがとうございます。
Eraseの使用方法は判っているつもりで、
Nothingでもできる記述があったので試していたところなんです。
No.3
- 回答日時:
失礼しました。
エラーの発生箇所は Set wProcDat = Nothing ですね。
下記によると動的配列には Erase を使うようです。
http://www.moug.net/tech/acvba/0050008.html
下記のプログラムを作ってみました。
Dim wProcDat() As Long
ReDim wProcDat(1 To 1000, 1 To 768)
wProcDat(1000, 768) = 999
wProcDat(1, 1) = 888
MsgBox wProcDat(1000, 768)
Erase wProcDat
MsgBox "Erase"
MsgBox wProcDat(1, 1)
最後のMsgBoxでインデックスが有効範囲に入りませんから、開放されているようです。
回答ありがとうございます。
Eraseの使用方法は判っているつもりで、
Nothingでもできる記述があったので試していたところなんです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VB6.0のメモリリークについて
Visual Basic(VBA)
-
メモリの解放について VB6 VBA
Visual Basic(VBA)
-
Form_Load と Form_Activate のタイミング
Visual Basic(VBA)
-
-
4
VB6 配列を初期化したい
Visual Basic(VBA)
-
5
メモリ不足
Visual Basic(VBA)
-
6
VB6のプロジェクトロードエラーについて
Visual Basic(VBA)
-
7
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
8
定数配列の書き方
Visual Basic(VBA)
-
9
Redim とEraseの違いは?
Access(アクセス)
-
10
配列を関数に渡す方法
Visual Basic(VBA)
-
11
Visual Basic 6.0 コンボボックスのChangeイベントが発生しません
Visual Basic(VBA)
-
12
VBの「As String * 128」とは?
Visual Basic(VBA)
-
13
VBPをダブルクリックするとたまに「メソッドは失敗しました " オブジェクト」と出るのですが?
Visual Basic(VBA)
-
14
VBプログラムの終了
Visual Basic(VBA)
-
15
VB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?
Visual Basic(VBA)
-
16
VBから参照できないCのDLLを使用する方法
Visual Basic(VBA)
-
17
VB6.0-整数と余りを求める
Visual Basic(VBA)
-
18
regsvr32で登録された一覧を知りたい
UNIX・Linux
-
19
VB6.0のIsNull関数に相当するもの
Visual Basic(VBA)
-
20
テキストボックスの入力制限
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでXY座標に並べられた...
-
VBA 変数名に変数を使用したい。
-
配列の中の最大値とそのインデ...
-
構造体配列の特定のメンバーをF...
-
C#でbyte配列から画像を表示さ...
-
VBA(メモリ展開)
-
vba フィルター 複数条件 3つ以...
-
Segmentation Fault (メモリ制限?)
-
Excel2010のinputboxで複数デー...
-
OutOfMemoryExceptionの回避策...
-
配列のペースト出力結果の書式...
-
VBAで配列引数を値渡しできない...
-
デバイスマネージャーの一覧取得
-
CheckBoxの配列化
-
VB.NETの配列の限界を教えてく...
-
複数のtextboxの処理を一括で行...
-
構造体配列内の文字列検索のよ...
-
ExcelVBAで配列をベースに配列...
-
RPG 配列宣言について
-
ポーカーを作りたいのですが・・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
vba フィルター 複数条件 3つ以...
-
エクセルでXY座標に並べられた...
-
Dir関数で読み取り順を操作でき...
-
Excel2010のinputboxで複数デー...
-
構造体配列の特定のメンバーをF...
-
Redim とEraseの違いは?
-
配列のペースト出力結果の書式...
-
COBOLの基本的な事なので...
-
大量の変数を定義するにはどう...
-
DBから取得した値を配列へ代入する
-
EXCEL VBAの課題です
-
VBScriptでCSVファイルを読み出...
-
VBAでMODE関数をつくる
-
配列の中の最大値とそのインデ...
-
定数配列の書き方
-
構造体配列内の文字列検索のよ...
-
CheckBoxの配列化
-
Excelのメモリ(配列)の上限は2G...
おすすめ情報