c++ - 在地址 0x0 处使用 C++ vector 写入大小无效

标签 c++ vector valgrind

我正在努力提高我在 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/

相关文章:

c++ - 缩放 Dijkstra 算法的实现

vector - Godot 3d 获得前向矢量

c++ - STL Vectors 和 new 运算符

Mac OSX 上的 c++ 内存泄漏检测

c - 释放图表时释放太多

c++ - 通过平移放大鼠标位置?

c++ - 使用 OpenGL 显示 YUY2 (Y'UV422)

c++ - 在 C++ 中使用 vector 设置开关

c - 我正确加载我的字符数组吗?

c++ - 在 64 位 Linux 上编译 32 位 Qt - fatal error : gnu/lib-names-32. h