为什么 ptrVec = new vector<const char*> 编译失败



下面的代码有什么问题?当它用dev-c++编译时,它抱怨道:

18 E:\projects\pointer_test\main.cpp中的"operator="不匹配'ptrVec=(((const std::分配器&(std::分配器((&分配器((((,(((std::vector>(运算符new(12u((,(->std::vector<_Tp,_Alloc>::vector with _Tp=const char*,_Alloc=std::分配器,)))'

注d:\Dev Cpp\include\c++\3.4.2\bits\vector。tcc:131候选项为:std::vector&lt_Tp,_Alloc>&std::vector&lt_Tp,_Alloc>::运算符=(常量std::vector&lt_Tp,_Alloc>&([其中_Tp=const char*,_Alloc=std::分配器]

19 E:\projects\pointer_test\main.cpp ->' has non-pointer type std::vector 的基操作数

21 E:\projects\pointer_test\main.cpp无法转换ptrVec' to 布尔'

23 E:\projects\pointer_test\main.cpp ->' has non-pointer type std::vector的基操作数24 E:\projects\pointer_test\main.cpp中的"operator="不匹配'ptrVec=0'

注d:\Dev Cpp\include\c++\3.4.2\bits\vector。tcc:131候选项为:std::vector&lt_Tp,_Alloc>&std::vector&lt_Tp,_Alloc>::运算符=(常量std::vector&lt_Tp,_Alloc>&([其中_Tp=const char*,_Alloc=std::分配器]

#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类型是指针,如何避免内存泄漏问题?

vector不是指向向量的指针,它是指针的向量。去掉

ptrVec = new vector<const char*> ;

并将所有的->更改为.即可工作。另外,去掉if

请注意,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语句中。

如果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是指针,分配在堆上,必须手动释放

最新更新