下面的代码出了什么问题?虽然它与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>&)[与_Tp = const char *,_ Alloc = std :: allocator] 19 E:\ projects \ pointer_test \ main.cpp基本操作数 - >'有非指针typestd :: vector 21 E:\ projects \ pointer_test \ main.cpp无法将ptrVec'转换为bool'23 E:\ projects \ pointer_test \ main.cpp基本操作数 - >'具有非指针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类型是指针,如何避免内存泄漏问题?
3 回答
注意
vector<const char*> ptrVec;
是指针的向量,而不是指向向量的指针 . 这意味着使用ptrVec = new vector<const char*>() ;
分配矢量对象是不正确的 . (很可能,编译器因为缺少括号而抱怨 . )您有两种方法可以解决问题:
请注意,在选项1中,您应该在
if
语句中移动push_back()
调用 .vector不是指向vector的指针,它是指针的向量 . 摆脱界限
并将所有
->
更改为.
,它将起作用 . 另外,摆脱if
.如果在堆上分配char *,则需要手动释放它 . 我建议你写这个 .
vec在堆栈上分配,可以自动释放,vecPtr是指针,在堆上分配,必须手动释放