我正在努力提高我在 C++ 方面的知识,我编写了这个程序来尝试处理 vector 。该程序本身在语法上是正确的,但是当我编译时我得到一个 SEG FAULT 11。然后我在代码上运行 Valgrind,我得到一个 invalid write size 4
错误和 Address 0x0 未被堆栈、malloc 或(最近)释放
。这是我的代码
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
const int TTO = 2147483648;
int main()
{
int n, s, p, q, i;
cin >> n >> s >> p >> q;
vector<int> a;
a[0] = s % TTO;
for(i = 1; i < n; i++)
a[i] = (a[i-1]*p+q) % TTO;
sort(a.begin(), a.end());
a.erase(unique(a.begin(), a.end()), a.end());
cout << a.size() << endl;
return 0;
}
我该怎么做才能避免 SEG FAULT
?
编辑:我使用的输入是3 1 1 1
最佳答案
您的 vector 没有元素,因此即使访问 a[0]
也是非法的(更准确地说,是 undefined behavior )。给你的 vector 一个初始大小:
vector<int> a(n);
^^^
关于c++ - 在地址 0x0 处使用 C++ vector 写入大小无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38376931/