C ++ 11分段错误试图将数组(<算法>)动态复制到向量中

Posted

技术标签:

【中文标题】C ++ 11分段错误试图将数组(<算法>)动态复制到向量中【英文标题】:C++11 Segmentation Fault trying to copy array (<algorithm>) into vector dynamically 【发布时间】:2015-05-17 13:55:08 【问题描述】:

当我尝试将固定大小的数组复制到默认构造的向量时,出现段错误。我很困惑,因为我一直认为向量是灵活的容器,可以根据它们吸收的动态数据调整它们的大小。如果我在编译时为向量分配空间,复制工作,但是如何在编译时不分配大小的情况下将此数组复制到向量中?

int numbersArr[] 10, 20, 30, 40, 50, 60, 70, 80, 90, 100;
vector<int> NumbersVec; //Default constructor
// vector<int> NumbersVec(10); If I allocate the memory in compile time it works

copy(numbersArr, numbersArr + 10, NumbersVec.begin()); //Segmentation fault (core dumped)

【问题讨论】:

【参考方案1】:

目标数组需要有足够数量的元素作为源。因此,根据需要使用下面添加新元素。

#include <iterator>
copy(numbersArr, numbersArr + 10, back_inserter(NumbersVec));

`

【讨论】:

感谢这项工作,但我仍然很困惑为什么我查找了back_inserter:“反向插入迭代器是一种特殊类型的输出迭代器,旨在允许通常覆盖元素的算法(例如作为副本)改为在容器末尾自动插入新元素。”那么这是copy() 试图覆盖现有元素和段错误的问题,因为它没有找到? 它所说的复制覆盖元素(如果存在)。你在你的问题中说的是对的。 vector 是一个动态容器。但是,要实现这一点,您必须使用 insert()、push_back() 等方法。 back_inserter() 返回一个处理插入的 back_insert_iterator。

以上是关于C ++ 11分段错误试图将数组(<算法>)动态复制到向量中的主要内容,如果未能解决你的问题,请参考以下文章

c++ 。我试图通过在开关内使用数组来获取用户输入,但是当我运行代码时它显示分段错误?

C - 将结构写入二维数组会导致分段错误

IPC linux中数组存储的分段错误

带有地图和矢量c ++的分段故障11

分段错误:C ++ IntVector中为11

带有clang的C大数组中的奇怪分段错误