包含导致段错误的向量的 STL 向量

利益相关方333

当我尝试发出push_back呼叫时,以下代码会导致段错误我究竟做错了什么?

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    std::string * foo = new std::string("hello world");
    cout << *foo << endl;

    std::vector<std::vector<std::string *> > my_vecs;
    my_vecs[0].push_back(foo); // segfaults
    cout << "trying to print my_vecs size of " << my_vecs.size() << " but we never reach that point due to segfault " << endl;
    return 0;
}

我很确定我违反了使用合同之一vector,因为问题肯定不在于 STL 实现。

利益相关方333

外部向量必须首先显式增长,然后才能推送到其元素。

这可能有点令人惊讶,因为 STL 映射会自动插入它们的键。但是,它肯定是这样的。

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    const int DESIRED_VECTOR_SIZE = 1;
    std::string * foo = new std::string("hello world");
    cout << *foo << endl;

    std::vector<std::vector<std::string *> > my_vecs;

    for (int i = 0; i < DESIRED_VECTOR_SIZE; ++i) {
        std::vector<std::string *> tmp;
        my_vecs.push_back(tmp); // will invoke copy constructor, which seems unfortunate but meh
    }

    my_vecs[0].push_back(foo); // segfaults
    cout << "now able to print my_vecs size of " << my_vecs.size() << endl;
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

断言错误,使用STL向量

来自分类Dev

向量加法的STL算法

来自分类Dev

STL向量错误:类型名称未知

来自分类Dev

STL向量:resize()和assign()

来自分类Dev

STL向量元素去除效率

来自分类Dev

MSVC 14 STL向量保留

来自分类Dev

STL向量元素去除效率

来自分类Dev

STL无序映射-插入向量

来自分类Dev

C ++ STL向量深度擦除

来自分类Dev

C++ STL:向量语法

来自分类Dev

调整向量的向量大小会导致段错误

来自分类Dev

在C ++中以递归方式打印向量的简单STL向量

来自分类Dev

stl-字符串是向量吗?

来自分类Dev

stl向量中的内存映射文件存储

来自分类Dev

STL中的向量push_back?

来自分类Dev

C ++ STL向量载体和内存管理

来自分类Dev

使用Cilk数组符号和STL向量

来自分类Dev

使用STL对部分向量进行排序

来自分类Dev

从搜索STL向量的函数返回引用

来自分类Dev

使用STL C ++对向量对进行排序

来自分类Dev

STL 向量无故损坏,VC++ 2017

来自分类Dev

在C ++中使用STL生成配对项目的向量

来自分类Dev

从真实值的STL向量中随机选择索引

来自分类Dev

从其他容器构造的STL容器(例如,向量列表)

来自分类Dev

从此图表了解STL向量的时间复杂度

来自分类Dev

将参考传递到STL向量中的偏移位置

来自分类Dev

如何使用STL将结构向量转换为地图

来自分类Dev

删除指针的STL向量条目的快速方法

来自分类Dev

C ++ STL中向量的恒定时间交换逻辑