【发布时间】:2023-03-25 01:05:01
【问题描述】:
我完全被这个错误迷惑了,我希望你能帮助我! 我有一个具有结构向量的类(该结构称为粒子)。我只是在编写一个 getter,它返回结构中某个字段的向量;一次用于名为 x 的字段,然后再次用于名为 v 的字段:
vector<double> x = s.getx();
vector<double> v = s.getv();
由于某种原因,getx 有效,但 getv 无效:它给了我“malloc(): memory corruption:”。
这里是 getx 和 getv 类:
vector<double> getx() {
vector<double> ret(number-2);
for(int i = 1; i < number; i++) {
ret[i-1] = masses[i].x;
}
return ret;
}
vector<double> getv() {
vector<double> ret(number-2);
for(int i = 1; i < number; i++) {
ret[i-1] = masses[i].v;
}
return ret;
}
错误发生在这一行:
vector<double> ret(number-2);
在getv中。
我如此困惑的原因是这两种方法本质上是相同的!当我用常数替换 (number-2) 时,我什至得到同样的错误,例如4. 根本无法分配内存!
我希望你能看到我做错了什么......
非常感谢您的帮助, 最良好的祝愿, 夜光
【问题讨论】:
-
矢量大小应该是
number-1,你犯了一个错误。 -
@ipc 是对的。为了消除错误的可能性,请使用
push_back而不是赋值。