みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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
ところで、質問のソースコードのインデントを保持する方法はないでしょうか?

投稿日時 - 2007-02-23 10:15:07

QNo.2776747

暇なときに回答ください

質問者が選んだベストアンサー

メモリリークについては特に問題ないと思います。

インデントには全角空白しかないようです。

投稿日時 - 2007-02-23 10:24:50

お礼

すばやい回答ありがとうございます。
これがC言語だと malloc したポインタを返すことになり要注意ですが、VBでは気軽にこのようなことをしても大丈夫なんですね。

インデントの件は参考になりました。こんな方法があるのを思いつきませんでした。

投稿日時 - 2007-02-23 15:16:10

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問