2013-03-06 53 views
-1

下面的代码有什么问题?虽然它与DEV-C++编译,它抱怨:为什么ptrVec =新载体<const char*>编译失败

18 E:\项目\ pointer_test \ main.cpp中没有匹配用于 '运算符='“ptrVec =(((常量的std ::分配器&) ((常量 的std ::分配器)(&分配器()))), (((标准::矢量>)运算符 新(12U)),( - >的std ::矢量< _TP,_Alloc> :: vector with _Tp = const char *,_Alloc = std :: allocator ))) ector.tcc:131个候选是: 的std ::矢量< _TP,_Alloc> &的std ::矢量< _TP,_Alloc> ::运算符=(常量 的std ::矢量< _TP,_Alloc> &)[与_TP =常量字符*,_Alloc = 的std ::分配器]

19 E:\项目\ pointer_test \ main.cpp中碱->' has non-pointer type STD的操作数::矢量

21 E:\项目\ pointer_test \ main.cpp中无法转换ptrVec' to bool'

23 E:\ projects \ pointer_test \ main.cpp bas ->' has non-pointer type STD电子操作数::矢量 24 E:\项目\ pointer_test \ main.cpp中没有匹配用于 '运算符=' 'ptrVec = 0'

音符d:\开发-CPP \包括\ C++ \ 3.4.2 \位\ vector.tcc:131个候选是: 的std ::矢量< _TP,_Alloc> &的std ::矢量< _TP,_Alloc> ::运算符=(常量 的std ::矢量< _TP,_Alloc> &)[与_TP =常量字符*,_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类型是指针,该如何避免内存泄漏问题?

回答

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中,您应该在if声明中移动push_back()呼叫。

+0

很清楚。:) – 2013-03-06 06:20:44

2

向量不是指向矢量的指针,它是指针的向量。摆脱线

ptrVec = new vector<const char*> ; 

,并改变所有的->.,它会工作。另外,摆脱if

+0

谢谢,我明白了。 – 2013-03-06 06:19:06