为什么 ptrVec = new vector<const char*> 编译失败
why ptrVec = new vector<const char*> compiles failed
下面的代码有什么问题?当它用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<_Tp,_Alloc>&std::vector<_Tp,_Alloc>::运算符=(常量std::vector<_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<_Tp,_Alloc>&std::vector<_Tp,_Alloc>::运算符=(常量std::vector<_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*>() ;
的矢量对象是不正确的。(很可能是编译器因为缺少括号而抱怨。(
你有两个选择来解决这个问题:
-
将矢量声明为指针:
vector<const char*>* ptrVec;
-
清理代码,使其与向量对象:一起工作
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是指针,分配在堆上,必须手动释放