1

このような方法で配列を Pointer に変換し、ポインタを定数に返すことはできますか? メモリ割り当てに関しては正しいですか?

const int* convert_vector_to_pointer(std::vector<std::pair<int, int> >& v)
{
    std::vector<std::pair<int, int> >::iterator it = v.begin();
    int* a = new int[2*v.size()];
    int i = 0;
    for(; it != v.end(); ++it)
    {
        if(i < 2*v.size())
        {
            a[i] = (*it).first;
            a[i + 1] = (*it).first;
            i += 2;
        }
    }
    const int* b = const_cast<const int*>(a);
    return b;
}
4

1 に答える 1

1

関数の問題は、関数内で配列を割り当て、それへのconstポインターを返すことです。どちらでも問題ありませんが、一緒にすると、呼び出し元のコードがオブジェクトを処理するタスクを取得することにdeleteなりconst、これは未定義の動作です。だからあなたの例は本当に正しくありません。

于 2013-05-14T06:46:45.163 に答える