C++容器上的分段故障循环
Seg Fault Looping over C++ containers
以下是代码(查找2个集合的并集(:
template <class dtype>
void printSet(dtype data)
{
std::cout<<"n";
for(auto i = data.begin(); i != data.end(); i++)
{
std::cout<<*i<<" ,";
}
}
int main(int argc, char const *argv[])
{
int arr[] = {1,2,3,4,5};
std::set<long long> a(arr, arr + 5), b(arr, arr + 5), c;
std::vector<long long> v;
b.insert(1000);
printSet(a);
printSet(b);
set_union(a.begin(), a.end(), b.begin(), b.end(), v.begin());
printSet(v);
return 0;
}
我得到的是:
1 ,2 ,3 ,4 ,5 ,
[1] 9444 segmentation fault ./a.out
我哪里搞砸了?
v
为空,因此无法写入v.begin()
。您应该使用std::back_inserter(v)
。
set_union
需要一个有效的输出迭代器,因为应该允许它在该迭代器上进行写入。v
为空,因此v.begin()
不是有效的迭代器。
尝试将您的矢量声明为
std::vector<long long> v(42);
为了清楚起见:如果在set_union
行之前刷新std::cout
,您应该会看到也打印了b
。
至于错误,我建议添加以下内容:
#include <iterator>
并将set_union
行更改为:
set_union(a.begin(), a.end(), b.begin(), b.end(), back_inserter(v));
back_inserter
返回的back_insert_iterator
是一个适合在这里使用的输出迭代器:它将为set_union
分配给它的每个项调用v.push_back
。
在你的平台上留言&环境:
一般来说,你应该确保你的核心文件大小限制是非零的(除非你在写大量的程序,否则就不受限制(,并学会用调试器检查核心文件。
相关文章:
- 分段故障(堆芯转储)矢量
- 数组的指针从不分段故障
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 分段故障背包问题
- 分段故障 11,从类函数显示动态 C 字符串
- 面临分段故障 使用 ffmpeg 读取视频时,因为"pFormatCtx-> streams [i]-> codecpar"的地址0x00
- 在C++中,当指向删除和指向不同对象时,分段故障指针
- 分段故障说明
- 分段故障(核心转储)-不知道为什么
- 分段故障线程
- hiredis SET遇到分段故障
- 分段故障,合并排序算法
- 多线程程序中的分段故障和gdb回溯上的不完整信息
- 到达主C++之前分段故障
- 分段故障核心使用 IF流转储
- 使用向量的移动键盘排列(分段故障)
- 在二进制树插入和遍历期间,我得到了分段故障
- 分段故障在类之间返回整数
- C++分段故障BST