-2

以下のコードの何が問題になっていますか? dev-c++ でコンパイルしますが、次のように文句を言います。

18 E:\projects\pointer_test\main.cpp 'ptrVec = (((const std::allocator&)((const std::allocator )(&allocator()))), ((( std::vector > )operator new(12u)), (->std::vector<_Tp, _Alloc>::vector with _Tp = const char*, _Alloc = std::allocator, )))'

注意 d:\Dev-Cpp\include\c++\3.4.2\bits\vector.tcc:131 候補は: std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=( const std::vector<_Tp, _Alloc>&) [with _Tp = const char*, _Alloc = std::allocator]

19 E:\projects\pointer_test\main.cpp ->' has non-pointer typestd::vectorの基本オペランド

21 E:\projects\pointer_test\main.cpp はptrVec' to ブール値を変換できませんでした'

23 E:\projects\pointer_test\main.cpp ->' has non-pointer typestd::vector の基本オペランド 24 E:\projects\pointer_test\main.cpp 'ptrVec = 0' の 'operator=' に一致しません

注意 d:\Dev-Cpp\include\c++\3.4.2\bits\vector.tcc:131 候補は: std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=( const std::vector<_Tp, _Alloc>&) [with _Tp = const char*, _Alloc = std::allocator]

#include <cstdlib>
#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char *argv[])
{
    vector<const char*> ptrVec ; 
    ptrVec = new vector<const char*> ;
    ptrVec->push_back("Hello");

    if (ptrVec)
    {
           ptrVec->clear();
           ptrVec = NULL;
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}

ベクトル内の emelemts のタイプがポインタの場合、メモリ リークの問題を回避するにはどうすればよいですか?

4

3 に答える 3

2

vector はベクトルへのポインタではなく、ポインタのベクトルです。行を取り除く

ptrVec = new vector<const char*> ;

すべてを に変更する->.、機能します。また、を取り除きifます。

于 2013-03-06T02:25:36.937 に答える
0

vector<const char*> ptrVec;これはポインタのベクトルであり、ベクトルへのポインタではないことに注意してください。これは、ベクトルオブジェクトの割り当てptrVec = new vector<const char*>() ;が正しくないことを意味します。(ほとんどの場合、括弧がないためにコンパイラーが文句を言っています。)

問題を解決するには、次の2つの選択肢があります。

  1. ベクトルをポインタとして宣言します。

    vector<const char*>* ptrVec;
    
  2. ベクトルオブジェクトで動作するようにコードをクリーンアップします。

    int main(int argc, char *argv[])
    {
        vector<const char*> ptrVec ; 
        ptrVec.push_back("Hello");
        ptrVec.clear();
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

オプション1では、ステートメントpush_back()内で呼び出しを移動する必要があることに注意してください。if

于 2013-03-06T03:07:34.530 に答える