0

私の関数に次のように配列が渡されたとしましょう:

int someFunction ( SomeClass * const * array, int arr_size ) { }

これはいくつかの構造体の配列です:

struct SomeStruct {
   int value;
   int value2;
};

私が達成しようとしているのは、その関数で宣言されたオブジェクト内で参照を作成することです:

int someFunction ( SomeStruct * const * array, int arr_size )
{
   NewClass newclass (array, arr_size);
}

私のコンストラクタは次のようになります。

Newclass::NewClass( SomeStruct * const * array, int arr_size )
{
   SomeStruct ** myReference = new SomeStruct * [arr_size];
   for (int i = 0; i < arr_size; ++i)
   {
      myReference[i] = array[i];
   }

   myReference[0] -> value = 10;
}

ここで、配列の最初の要素の値を出力したい場合、ゼロになります。

int someFunction ( SomeStruct * const * array, int arr_size )
{
   NewClass newclass (array, arr_size);

   cout << array[0] -> value << endl;
}

出力:

0

クラスから非オブジェクトを参照することさえ可能ですか? 参照配列を取得してソース配列を変更するにはどうすればよいですか? 以前はその関数に参照配列を非オブジェクトとして持っていましたが、すべて正常に機能しました。いや、そのままにしておくわけにはいかない。

4

1 に答える 1

0

で構造体ポインターを割り当てるときNewclass::NewClass()、実際の構造体を指すようにそれらのポインターを実際に初期化するのを忘れています。

必要なもの:

Newclass::NewClass(SomeStruct* const* array, int arr_size)
{
    SomeStruct** myReference = new SomeStruct*[arr_size];
    for (int i = 0; i < arr_size; ++i) {
        myReference[i] = array[i];
    }
    myReference[0]->value = 10;
}

私はすべてのポインターの間接化と、なぜそれが必要なのかについて混乱していると言わざるを得ません。そして、あなたもメモリをリークしています。あなたは決してdelete[] myReference

std::vectorまた、すべてのメモリ管理を手動で行うのではなく、使用することを検討する必要があります。

于 2013-10-28T23:21:55.367 に答える