- ベストアンサー
Visual Studio 2003での2次元可変長配列でエラー
Visual Studio 2003での2次元可変長配列でエラーが発生します。 エラー内容 'System.NullReferenceException' のハンドルされていない例外が microsoft.visualbasic.dll で発生しました。 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。 ソースは dim return_array()() For i As Integer = 0 To 5 Step 1 ReDim Preserve return_array(i)(6) Next のような感じです。 ループを使う必要があるのはreturn_array()()が状況に応じてサイズを変更が必要なためです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ReDimは、オブジェクトに対して行ないます。 質問者さんが書いたコードは、 変数名を定義しただけですから、これはオブジェクトとは言いません。 つまり、何もないNull値の変数に対して、配列の拡張を表すコードを 実行したわけですから、Null例外が発生します。
その他の回答 (1)
- pen_pen_pen
- ベストアンサー率65% (52/79)
原因はNo.1さんの通りとしてではどうするのかといえば。 dim return_array()() 'まず0~5までの配列にして・・・ ReDim return_array(5) For i As Integer = 0 To return_array.Length - 1 '個々の配列を0~6までの配列にする。 ReDim return_array(i)(6) Next Preserveは必要ないかと思われます。
お礼
自己解決できました。 ループ脱出の条件が間違っており 配列を伸張しすぎた事が原因だったようです。 ありがとうございました。
補足
元々値が入っている事そして事前に必要な要素数の確定が困難な事などから条件に必要な要素数をループで確定したいと言う状況です。 また確定条件が「要素数-空白の要素数」なので実質ループを使わなければ必要要素数の確定が出来ないような状況です。
補足
代入を行っている事を書き忘れました。 dim return_array()() For i As Integer = 0 To 5 Step 1 ReDim Preserve return_array(i)(6) return_array(i) = 代入される1次元配列 Next の形が成立しています。