-2

下面的代码有什么问题?虽然它使用 dev-c++ 编译,但它抱怨:

18 E:\projects\pointer_test\main.cpp 与 'ptrVec = (((const std::allocator&)((const std::allocator )(&allocator()))) 中的 'operator=' 不匹配,((( 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 bool'

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*>() ;是不正确的。(很可能,编译器因为缺少括号而抱怨。)

您有两种选择来解决问题:

  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 回答
0

如果 char* 分配在堆上,则需要手动释放。我建议你写这个。

#include <string>
#include <vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
  vector<string> vec;
  vector<string> *vecPtr = new vector<string>();
  vec.push_back("hello");
  vecPtr->push_back("world");

  if (vecPtr) {
    delete vecPtr;
    vecPtr = nullptr;
  }

  system("pause");
  return EXIT_SUCCESS;
}

vec分配在栈上,可以自动释放,vecPtr是指针,分配在堆上,必须手动释放

于 2018-03-23T05:37:35.647 回答