【发布时间】:2016-09-09 10:26:20
【问题描述】:
我在这里搜索了很多,但对于我来说,对于 c++ 的高级新手来说,没有正确的解释。我以前使用结构向量,现在我遇到分段错误......
这就是为什么我想知道这些对象实际上是如何工作的,以及我的做法是否正确!
我有一个类似的结构
struct numberOfSpecies {
int predator;
int prey1;
int prey2;
};
以及它的向量:
std::vector<numberOfSpecies> size;
在我调整它的大小并用值填充它之前。
size.resize(100);
这实际上是在做什么?这适合结构吗? 好像是用零初始化的……
现在我正在这样做:
size[t].predator=0;
size[t].prey1=0;
size[t].prey2=0;
for(int k = 0; k < N; ++k){
size[t].predator++;
size[t].prey1++;
size[t].prey2++;
}
这是对的吗?可能的问题在哪里?如何做得更好?
【问题讨论】:
-
resize 创建
n结构数,但您的结构仅在意外情况下被初始化为 0(因为您使用调试模式)。你应该假设每个值在调整你使用它的方式后都有一个随机的未定义值。 -
可以帮忙:
t的价值是什么?分段错误发生在哪里?你能添加更多代码吗?最好以stackoverflow.com/help/mcve 方式 -
@Hayt 你确定在 0 初始化是个意外吗?我一直认为 resize 调用对象的构造函数,所以在这种情况下,默认一个,它将每个成员都设置为 0
-
@Hayt:
std::vector将value-initialize结构而不是default-initialize结构。所以对于 POD 来说,就是零初始化。 -
你希望数组的每个元素在初始化结束时包含什么?