初始化空std::vector C++时出现分段错误
Segmentation fault while initializing an empty std::vector C++
我正在尝试使用这样的向量数组:
vector<foo*> *vec = new vector<foo*>(n);
vec的一些位置将为空,其中一些位置稍后将填充一些数据:
vec[i].push_back(&foo_var);
我的问题是vec的空位置。假设i
等于0
,我没有push_back
。然后,当我尝试进行一些检查时,例如,
vec[0].size();
程序返回的不是预期的返回0
而是一个巨大的数字1457283635
。
四处搜索,我发现我应该初始化空位置。然后我试试这个:
vector<foo*> vec = new vector<for*>(n);
for(int i = 0; i < n; i++) {
vec[i] = vector<foo*>();
}
...
这个"解决方案"足以使我的程序按预期工作(例如,返回空位置大小的0
)。
然而,在增加了n
的大小之后,我的程序现在在这一行崩溃了:
vec[i] = vector<foo*>();
程序发送分段故障错误。
- 有人能解释一下发生了什么吗
- 我应该如何处理这个特定的案例
- 在这种情况下,向量初始化的最佳实践是什么
你的意思似乎是
vector<foo*> *vec = new vector<foo*>[n];
而不是
vector<foo*> *vec = new vector<foo*>(n);
第一个分配动态存储器中的向量数组,而第二个分配具有n个元素的单个向量。考虑到你可以定义一个向量的向量。例如
std::vector<std::vector<foo *>> vec( n );
您是想创建n
空向量,还是用n
元素填充单个否决器?
我假设是前者,但通过在new
语句中使用()
,您实际上已经完成了后者,只创建了一个包含n
foo*
元素的向量
你应该使用一个向量的向量来解决这个问题,这样你就不必自己做内存管理了。
std::vector<std::vector<foo*> > vec(n);
这随后创建foo*
的n
空向量。
您的需求是否表明您必须使用动态内存?
如果没有,创建为可能更简单
vector<foo*> vec;
然后使用vec作为"正则"向量变量,而不是使用指向向量的指针?
那么就更简单了:
vector<foo*> vec;
foo* pFoo = something;
vec.push_back(pFoo);
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?