ポインタのポインタ

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
真紅
記事: 12
登録日時: 2005年7月20日(水) 17:59
連絡する:

ポインタのポインタ

#1 投稿記事 by 真紅 »

クラスオブジェクトのポインタの配列を扱いたいのですが、配列数が不定なので動的にメモリを確保したいのです。
静的であれば、

コード: 全て選択

Dim test[100] As *TEST
とすればうまくいくのですが…。

↓のような事をしようとしています。

コード: 全て選択


Class TEST
Public
    b As Long
End Class

Dim a As **TEST
Dim i As Long

a = malloc(4 * 4)
For i = 0 To 3
    a = New test()
    a->b = 1
    Delete a
Next
free(a)


要はポインタのポインタ型を使えないかということです。
ポインタ配列をDWord型配列にとっておき、必要なときに*TEST型変数にポインタを入れれば出来ることは出来るのですが、呼び出すたびに「*TEST型変数にポインタを入れる」という作業をしなければならないので、何かと効率が悪いです。

何かうまい手はないでしょうか?
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

Re: ポインタのポインタ

#2 投稿記事 by イグトランス »

配列へのポインタもクラスにすれば、と思ったら駄目でした。

コード: 全て選択

Class TestPtrArray
	Ptr As *VoidPtr
	Size As DWord
Public
	Function At(n As DWord) As *Test
		If n <= Size Then
			At = Ptr[n]
		End If
	End Function
/* 省略 */
End Class

Dim a As TestPtrArray
Dim i As Long

a.ArrayAlloc(3)
For i = 0 To 3
	a.ObjectAlloc(i)
		a.At(i)->b = 1 '「閉じカッコ ")" の後に不正な文字が含まれています」というエラー
'	a.ObjectFree(i)
Next
'a.ArrayFree()
オブジェクトと配列の開放はデストラクタが行ってくれるようにしました
真紅
記事: 12
登録日時: 2005年7月20日(水) 17:59
連絡する:

Re: ポインタのポインタ

#3 投稿記事 by 真紅 »

結局こんな感じにしたら割と楽になりました。

コード: 全て選択


Class TEST
Public
    b As Long
End Class

Dim a As *TEST
Dim i As Long

a = New[ELM(4)] TEST
For i = 0 To 3
    a.b = 1
Next
Delete a

ただし数の変更が効かないのが難点ですね。

有難う御座いました。
返信する