• ベストアンサー

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()()が状況に応じてサイズを変更が必要なためです。

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

  • ベストアンサー
  • SUPER-NEO
  • ベストアンサー率38% (706/1857)
回答No.1

ReDimは、オブジェクトに対して行ないます。 質問者さんが書いたコードは、 変数名を定義しただけですから、これはオブジェクトとは言いません。 つまり、何もないNull値の変数に対して、配列の拡張を表すコードを 実行したわけですから、Null例外が発生します。

izayoimizuki
質問者

補足

代入を行っている事を書き忘れました。 dim return_array()() For i As Integer = 0 To 5 Step 1 ReDim Preserve return_array(i)(6) return_array(i) = 代入される1次元配列 Next の形が成立しています。

その他の回答 (1)

回答No.2

原因は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は必要ないかと思われます。

izayoimizuki
質問者

お礼

自己解決できました。 ループ脱出の条件が間違っており 配列を伸張しすぎた事が原因だったようです。 ありがとうございました。

izayoimizuki
質問者

補足

元々値が入っている事そして事前に必要な要素数の確定が困難な事などから条件に必要な要素数をループで確定したいと言う状況です。 また確定条件が「要素数-空白の要素数」なので実質ループを使わなければ必要要素数の確定が出来ないような状況です。

関連するQ&A

  • C# 配列?

    C#2005で以下のコードを実行すると 'System.NullReferenceException' のハンドルされていない例外が テスト.exe で発生しました。 追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。 となります。配列は定義しているのですが 何がおかしいのでしょうか? Label[] lblTest = new Label[5]; private void Init() { for (int i = 0; i < 5; i++) { lblTest[i].Text = "1"; // ここで、エラー } }

  • エラー

    このカテゴリーでいいのかわかりませんが、わかる方、教えてください。以下のようなエラーがでます。なぜでしょうか? '/SSO2/School/SSOLogin' アプリケーションでサーバー エラーが発生しました。 -------------------------------------------------------------------------------- オブジェクト参照がオブジェクト インスタンスに設定されていません。 説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。 例外の詳細: System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 ソース エラー: 現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下の例外スタック トレースを使って確認できます。 スタック トレース: [NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。] SSOLoginMonitor.Global.Application_BeginRequest(Object sender, EventArgs e) +46 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +92 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +64 -------------------------------------------------------------------------------- バージョン情報: Microsoft .NET Framework バージョン:2.0.50727.42; ASP.NET バージョン:2.0.50727.42

  • 2次元動的配列の第一引数のみを可変にする

    ReDim Preserve aStrSKU(x, 2) aStrSKU(x, 0) = strPre aStrSKU(x, 1) = サブ2 aStrSKU(x, 2) = サブ3 x = x + 1 上記のソースをDo Untilでまわしているのですが、 2週目以降にxに1を足して行数だけ増やしたいのですが、 2週目でエラーが発生します。 行数だけ要素数を増やす方法はありますか?

  • AccessVBAで、二次元配列を動的に設定したい

    以下のコードにあるattrという配列に、DB上のとあるコードと名前を設定したいと思います。 DB上のデータ量は可変なので、データを取得するごとに動的に配列attrの要素数を動的に増やしたいと思っています。 検索等で色々と調べながら以下のコードを書いてみたのですが、どうもうまく動きません。 ご教授願います。 --------------------------------------------------- Dim attr() As String [loop start] ReDim Preserve attr(i, 0) ReDim Preserve attr(i, 1) attr(i, 0) = コード attr(i, 1) = 名前 [loop end]

  • アプリケーションでサーバー エラー??

    はじめまして。 あるオンラインゲームサイトの新規会員に登録しようと思いまして、手続きの指示通り入力し、『登録ボタン』をクリックした処、下の様な画面になってしまい、 先に進めません。そのサイトには報告してありますが… そもそも自分のPCが原因なのかすらわかりません。どっちが原因でしょうか?相手の方でしたら待つしかないと思いますが、自分の方でしたら何をすればよいのでしょうか?教えてください。お願いします。(情報不足でしたら言ってください。すいません。) '/' アプリケーションでサーバー エラーが発生しました。 ------------------------------------------------- オブジェクト参照がオブジェクト インスタンスに設定されていません。 説明 : 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。 例外の詳細: System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。

  • VBScripの2次元動的配列

    下記VBScripサンプルで2次元動的配列をつかっているのですが redim preserveでエラになります。 (インデックスが有効範囲にありません) 原因をご伝授ください。 環境 IIS 5.0 Windows XP index.asp <%@ LANGUAGE="VBScript" %> <% 'option explicit %> <!-- #include file="test.asp" --> <% Dim Order() Dim dat() call test(Order,dat) response.write("dat=" & dat(1,2)) %> test.asp <%'Option Explicit%> <% function test(Order_info,dat) Dim i redim dat(0,7) for i=0 to 1 <- iが0の時はOK,iが1になるとエラー redim preserve dat(i,7) dat(i,1)="1" dat(i,2)="2" dat(i,3)="3" dat(i,4)="4" dat(i,5)="5" dat(i,6)="6" next End function

  • fireefox でアプリケーションでサーバー エラー

    初歩的なことかも知れませんが、よろしく Windows Me で Webブラウザにfirefox(1.5.0.4) を使っていますすが、あるお勉強系のサイトに会員としてログインしようとすると >アプリケーションでサーバー エラーが発生しました。 となり、 > 説明 : 現在の Web 要求を実行中に、ハンドルされ >ていない例外が発生しました。エラーに関する詳細 > および例外の発生場所については、スタック トレ > ースを参照してください。 という説明がでます。 スタック トレース:には、 > [NullReferenceException: オブジェクト参照がオ > ブジェクト インスタンスに設定されていません.] > ・・・・ となっています。 IEでは、こんなことにはなりません。また、Win2000でも試してみましたがこんなエラーは出ませんでした。 IEは、使いたくないので。。。。 よろしく、、、、

  • クラスを配列で宣言してデバッグ中にエラーが出る。

    今、"Wireless_unit_str"というクラスをWireless_ID_str02 で宣言してこれを32個分宣言して Wireless_ID_str02[i]->Wireless_ID_str = "test"; 32個分のWireless_ID_str の中に全部”test” と代入してみようとしたのですが、デバッグ最中にその文を実行しようとすると、つぎのようなエラーが出ます。 (エラー内容) ”'System.NullReferenceException' のハンドルされていない例外が HomeBank.exe で発生しました。 追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。” 解決する方法はないでしょうか? array<Wireless_unit_str^>^ Wireless_ID_str02 = gcnew array<Wireless_unit_str^>(32); for(i=0; i < 32;i++) { Wireless_ID_str02[i]->Wireless_ID_str = "test"; } 作成したクラス”Wireless_unit_str”の内容 namespace HomeBank { using namespace System; using namespace System::Collections::Generic; /** * 明細データクラス */ ref class Wireless_unit_str { private: DateTime date; // 日付 String^ name; // 品名 String^ kind; // 分類 int money; // 金額 public: String^ Wireless_ID_str; //array<String^>^ Wireless_ID_str = gcnew array<String^>(32); public: Wireless_unit_str() { Wireless_ID_str = "test"; } }; }

  • Exceptionの意味

    'System.NullReferenceException' のハンドルされていない例外が mscorlib.dll で発生しました。 追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。 以上のえくせぷしょんの意味を教えてください。

  • エラーを解決したいんですが。

    // Genericsを用いたArrayListを使用し // ループ処理にはiteratorを使用しない。 // for文を使ってリスト中身が奇数の場合はそのまま画面表示。 // 偶数の場合は-1をかけてから画面表示。 import java.util.ArrayList; class Test{ public static void main(String[] args) { //GenericsのInteger型でArrayListのインスタンスを生成 ArrayList<Integer> array = new ArrayList<Integer>(); array.add(1); array.add(2); array.add(3); array.add(4); array.add(5); for(int i=0; i<array.size(); i++) { Integer integer = array.get( i ); //もし値が偶数だったら if(integer % 2 == 0){ integer *= -1; System.out.println( integer ); } //(それ以外)もし値が奇数だったら else{ System.out.println( integer ); } } } } 上記のプログラムで、 >Integer integer = array.get( i ); の場所が、「交換性がない型」と言われ、エラーになってしまうんですが どうしたらいいですか?

    • ベストアンサー
    • Java

専門家に質問してみよう