2次元配列を返す関数について
VB6でExcelのMMULTのような関数が欲しかったので作って見ました。
関数内で配列をRedimで確保して戻り値として返すのですが、このような方法でメモリーリークなど発生する心配はないでしょうか?
'行列の掛け算
Public Function mtxMult(ByRef mx1() As Double, ByRef mx2() As Double) As Double()
Dim r, c, i, r1, c1, r2, c2
Dim res() As Double
'行と列の最大値を得る
r1 = UBound(mx1, 1)
c1 = UBound(mx1, 2)
r2 = UBound(mx2, 1)
c2 = UBound(mx2, 2)
If c1 <> r2 Then Exit Function
ReDim res(0 To r1, 0 To c2) '答えの配列を確保
'各要素を掛ける
For r = 0 To r1
For c = 0 To c2
res(r, c) = 0
For i = 0 To c1
res(r, c) = res(r, c) + mx1(r, i) * mx2(i, c)
Next i
Next c
Next r
mtxMult = res
End Function
'動作確認
Private Sub Command1_Click()
Dim mx1(0 To 1, 0 To 1) As Double
Dim mx2(0 To 1, 0 To 1) As Double
Dim res() As Double
Dim r As Integer
List1.Clear
mx1(0, 0) = 1
mx1(0, 1) = 2
mx1(1, 0) = 3
mx1(1, 1) = 4
mx2(0, 0) = 5
mx2(0, 1) = 6
mx2(1, 0) = 7
mx2(1, 1) = 8
res = mmult(mx1, mx2)
For r = 0 To 1
List1.AddItem res(r, 0) & " , " & res(r, 1)
Next r
End Sub
ところで、質問のソースコードのインデントを保持する方法はないでしょうか?
お礼
ご指摘ありがとうございます。 おっしゃる通りで他に原因がありました・・・