
No.4ベストアンサー
- 回答日時:
ある程度の法則を持ってもよいのなら、APIがあります。
ZeroMemoryです。VBのString型は文字列の長さによってバイト数が変化するため、あらかじめバイト数を指定しておかないといけません。
もしそれを指定しないと、ひとつひとつの配列のサイズがバラバラのため、きちんと開放されなかったり、必要なメモリ領域まで開放するおそれがあります。もしVariantなどが含んでいるならばこれは使わないほうが良いかと思います。
サンプルでは
Byte = 1バイト
Integer = 2バイト
Long = 4バイト
String = 文字長によって可変。サンプルでは100バイト
なので、配列は107×256バイトの領域を使用しているのがわかります。
---------------これよりサンプル---------------
'テスト用の適当な構造体
Private Type typetype
bytTest As Byte
intTest As Integer
lngTest As String
strTest As String * 100
End Type
'初期化するAPI 第一パラ:構造体の先頭ポインタ/第二パラ:サイズ
Private Declare Sub ZeroMemory Lib "kernel32" Alias "RtlZeroMemory" (ByVal Destination As Long, ByVal Length As Long)
'構造体の配列数
Private Const DEF_ARY_SIZE As Long = 256
Private Sub Command1_Click()
Dim testTest(DEF_ARY_SIZE - 1) As typetype
Dim i As Long
'適当な値を設定
For i = LBound(testTest) To UBound(testTest)
With testTest(i)
.bytTest = i
.intTest = i * 10
.lngTest = i * 100
.strTest = Chr(i)
End With
Next i
'構造体の初期化
Call ZeroMemory(ByVal VarPtr(testTest(0)), Len(testTest(0)) * DEF_ARY_SIZE)
End Sub
No.3
- 回答日時:
構造体配列の初期化はErase, Redim以外の方法はないと思います。
メモリの余裕はあるのでしょうか?
タスクマネージャ等で観察して下さい。
足りなければメモリを増設するべきでしょう。
可変長文字列を使っているなら固定長文字列にした方がいい気がします。
マシンスペックと構造体の定義が分かれば、他に案が出るかも
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ラクマ(楽天オークション) ラクマで商品が届かない 2 2022/08/25 07:53
- その他(パソコン・スマホ・電化製品) 人間の長期記憶に関するモデルについて。 下記の内容をもとに、一番下の質問の具体例が思いつく方いたら具 1 2023/06/30 18:21
- 歴史学 論文 1 2022/03/24 17:02
- Amazon Amazon お急ぎ便について。注文して今朝、隣町のセンターに届いたのに、配送が遅れますという 3 2023/03/31 12:15
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- iPhone(アイフォーン) iPhoneに詳しい方に質問です! Appleのパスワードを忘れてしまって強制初期化をしたいのですが 1 2023/01/31 22:09
- 据え置き型ゲーム機 Wii Uの個人情報 1 2022/05/15 16:22
- ドライブ・ストレージ PCの移行についてやることを教えて下さい 4 2022/07/11 08:33
- 労働相談 有休消化について教えて下さい。 6月末にて退職の予定です。 現在、有休(1日8時間)残りが29日と半 2 2022/04/03 01:05
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
複数のtextboxの処理を一括で行...
-
大量の変数を定義するにはどう...
-
vba フィルター 複数条件 3つ以...
-
Excel2010のinputboxで複数デー...
-
excel vbaの配列なんですが・・・
-
Dir関数で読み取り順を操作でき...
-
VBAでMODE関数をつくる
-
構造体配列の特定のメンバーをF...
-
VB.NETの配列の限界を教えてく...
-
エクセルでXY座標に並べられた...
-
VBA 桁数が混在するソート
-
配列のペースト出力結果の書式...
-
EXCELを使って、アクセスログを...
-
countif/sumifのようなVBA関数
-
定数配列の書き方
-
ジャグ配列生成時の1オリジン
-
VBScriptでCSVファイルを読み出...
-
C言語 ポインタと配列
-
エクセル(VBA)の空白配列の削除...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
配列のペースト出力結果の書式...
-
定数配列の書き方
-
大量の変数を定義するにはどう...
-
構造体配列の特定のメンバーをF...
-
Redim とEraseの違いは?
-
複数のtextboxの処理を一括で行...
-
VB.NETの配列にExcelから読み込...
-
COBOLの基本的な事なので...
-
Excel2010のinputboxで複数デー...
-
VBAでMODE関数をつくる
-
レコードセットの中身を配列に...
-
ReDim PreserveよりもReDimが遅い
-
EXCELを使って、アクセスログを...
-
配列の中の最大値とそのインデ...
-
VB6のメモリ解放に関して
おすすめ情報