0

動的配列を読み取って使用しますが、少し質問があります。次の形式をプロトタイプに入れると:

void mmyfunc(int *& myArray)
{
 //implementation
}

1.配列を渡す場合、どのように呼び出すのですか? 私が得るので:

no matching function for call to 

2.次の実装を使用する場合:

void NetworkSocket::resizeArray (int *&orig, int index, int size)
{
    int *resized =  new  int[size];
    for (int i = 0; i < size; i++)
    {
        if ( i == index )
            i++;

        resized[i] = orig[i];
    }
    delete [] orig;
    orig = (int *)new int[size];
    orig = resized;
}

delete [] 行でセグ フォールトが発生します。

4

1 に答える 1

1

配列であなたが意味すると仮定します

int x[16];

そして、関数を次のように呼び出します

resizeArray (x, ...)

delete[]で割り当てられていないため、明示的に-ingすると未定義の動作が発生しますnew[]。また、x自動メモリに常駐するため、自動的にクリーンアップされます。さらに、配列を再割り当てすることはできません。配列はポインターではありません。引数として渡されると、ポインターに減衰します。

配列を次のように宣言した場合

int* x = new int[16];

その後、あなたのアプローチはうまくいくでしょう。しかし、まだ C++ ではありません。

std::vectorとだけを使用できますresize()。車輪を再発明しないでください (これが割り当てである場合を除きます)。

編集:これを見つけた:

orig = (int *)new int[size];
orig = resized;

漏れます。余分な を削除しnew[]ます。

編集2:

なに

if ( i == index )
        i++;

するべきですか?

于 2012-07-30T17:34:56.177 に答える