Я работаю над улучшением своих знаний на C++, и я написал эту программу, чтобы попытаться работать над векторами. Сама программа синтаксически корректна, но когда я компилирую, я получаю SEG FAULT 11. Итак, я запустил Valgrind в коде, и я получаю ошибку invalid write size 4
, а также Address 0x0 is not stack'd, malloc'd or (recently) free'd
. Вот мой кодНедопустимый размер записи с использованием векторов C++ в адресе 0x0
#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()'? –