我正在努力提高自己在C++中的知识,并且我编写了此程序以尝试处理向量。程序本身在语法上是正确的,但是当我编译时,我得到了一个SEG FAULT 11.所以然后我运行了Valgrind的代码,并且我得到了一个invalid write size 4
错误,并且还有Address 0x0 is not stack'd, malloc'd or (recently) free'd
。这里是我的代码在地址0x0处使用C++向量的无效写入大小
#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
我不确定是否是这种情况,但是当* undefined behavior *被调用时,会发生任何事情。 – MikeCAT
'resize()'你的向量在使用之前:'a [0]'。 –
@πάνταῥεῖ像这样'a.resize()'? –