C++无效指针错误

标签 c++ pointers

我从下面的代码中收到无效点错误,我不明白为什么。我要做的就是从 vector 中删除堆上的一些字符串:

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);
    }
}

编辑:是因为 push_back 创建了字符串的拷贝吗?

最佳答案

你的错误是因为元素不是动态分配的; vector 是。您要执行的操作需要:

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);
    }
}

但老实说,我看不出有什么理由这样做。正如您编写的代码不仅试图删除它从未实际分配的内存,它还会泄漏它分配的内容。

理由将指向对象的指针存储在像这样的 vector 中(例如对象实际上来自其他地方的另一个容器,您需要一个临时列表来进行自定义排序操作​​而无需扰乱了原始内容),但有些东西告诉我,您离这种需求还有很长的路要走。

关于C++无效指针错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15031803/

相关文章:

C++ Switch不会使用用作大小写的外部定义变量进行编译

c++ - boost线程notify_all()和sleep()

c - 如何为我的 char 指针分配内存?

c - 如何在 C 中进行 char* 数组元素交换?

c++ - 从多个结构访问字段与访问数组/vector 的元素相比是否更慢?

c++ - 从 V8 中的 C++ 回调调用 Javascript 函数

编译错误 : request member in something not a structure of union

c - fgets()会移动文件指针吗?

c++ - 指针增加有什么作用? (C/C++)

c++ - 来自文件的着色器,程序停止工作