我从下面的代码中得到无效点错误我不明白为什么.我要做的就是从向量中删除堆上的一些字符串:
void func() {
vector<string>* vec = new vector<string>;
vec->push_back(*(new string("1")));
vec->push_back(*(new string("2")));
for(vector<string>::iterator itr = vec->begin(); itr != vec->end(); ++itr)
{
string* ptr = &(*itr);
delete(ptr);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:是因为push_back创建了字符串的副本?
您的错误是因为元素未动态分配; 该矢量是.你要做的是需要:
void func()
{
vector<string*> vec;
vec.push_back(new string("1"));
vec.push_back(new string("2"));
for(vector<string*>::iterator itr = vec.begin(); itr != vec.end(); ++itr)
{
string* ptr = *itr;
delete(ptr);
}
}
Run Code Online (Sandbox Code Playgroud)
但老实说,我认为没有理由这样做.在编写代码时,您的代码不仅会尝试删除它从未实际分配的内存,而且会泄漏它所做的分配.
有有原因存储对象的指针在矢量这样的(如对象从另一个容器别的地方其实是和你需要他们的自定义排序操作的临时列表而不破坏原来的内容),但直觉告诉我你有这样一个需要的方式.