2

の配列を動的に割り当てたいstd::string。割り振る機能があります。プログラム全体で何度でも関数を呼び出すことができます。配列へのポインターが既に割り当てられている場合は、最初にメモリを解放してから、新しいメモリを割り当てます。

これが私が試したものです:

std::string *names;
bool already_allocated = false;
void allocate( int n)
{
    if( already_allocated)
    {
        delete names;
    }
    names = new std::string[n];
    already_allocated = true;
}

int main()
{
    allocate(5);
    allocate(6);
    return 0;
}

allocate()しかし、行の2回目の呼び出しで実行時エラーが発生していますdelete names

私は何か誤解していますか?

4

3 に答える 3

2

delete names配列で呼び出すことはできません。使用する必要があります

 delete[] names 

代わりは。

代わりにデータ構造にastd::vector<std::string>を使用するのはどうですか?names

于 2013-06-01T11:21:53.767 に答える