gpt4 book ai didi

c++ - 尝试访问存储在 vector 中的数据时出现段错误

转载 作者:行者123 更新时间:2023-11-28 05:43:43 25 4
gpt4 key购买 nike

我正在努力学习 C++。我已经创建了一个 vector 类 vec 并且我正在尝试实现一种方法来计算点积。

编译正常,但运行时出现段错误。我已将 dot product 方法中的 x(i) 引用固定为原因,但我不知道为什么。我认为这是关于错误访问内存的问题,但我不知道我做错了什么,也不知道正确的方法是什么。

我的 vector 类:

class vec{

private:
vector<double> data;
int n; // size

public:
vec (int s) { n = s; data.reserve(n); }

double get(int i) { return data[i]; }
void set(int i, double val) { data[i] = val; }
int size() { return n; }

double operator[] (int i) { return get(i); }
double operator() (int i) { return get(i); }

double dot (vec x) {
assert(n == x.size());
int z = 0;
for (int i = 0; i < n; i++){
z += data[i] * x(i);
}

return z;
}

};

我正在尝试这样使用它:

int main(int argc, char *argv[]) {

vec x = vec(3);
x.set(0, 1);
x.set(1, 1);
x.set(2, 2);

vec y = vec(3);
y.set(0, 2);
y.set(1, 2);
y.set(2, 3);

double z = x.dot(y);

}

最佳答案

改变这个:

data.reserve(n);

对此:

data.resize(n);

reserve 不会在 vector 中创建项目。它所做的只是增加容量。要预先实际创建 n 对象,您可以使用 resize

此外,我强烈建议您不要使用诸如n 之类的无关变量来跟踪 vector 的大小。请改用 vector::size() 函数。原因是如果由于某种原因 n 未正确更新,您将面临错误风险。

因此这应该是您的构造函数:

vec (int s) : data(s) {}

并转储n成员变量。

关于c++ - 尝试访问存储在 vector 中的数据时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36649790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com