矢量访问上的程序隔离故障

Program seg faults on vector access

本文关键字:程序隔离 故障 访问      更新时间:2023-10-16

我是一个c++新手,在OS X Yosemite上学习c++。

我在源文件中声明了一个像这样的向量。

vector <int> v(3);
代码:

#include <iostream>
#include <vector>
using namespace std;
void printVector (vector <int> v) {
    for (int i = 0; i < v.size() ; i++)
        cout << v[i] << endl;
}
int main (int argc, char ** argv) {
    vector<int> v(3);
    cout << "Initialise vectors..." << endl;
    v[0] = 10;
    v[1] = 11;
    v[2] = 12;
    printVector(v);
    v.push_back(7);
    cout << "push back (7)" << endl;
    printVector(v);

    return 0;
}

程序工作。

然后我在这里引用了这个网页,并按照它的方式像这样声明向量。

vector <int> v;

已编译(使用g++),但执行时程序分段错误11。

网站有问题吗?

你可以这样访问这些元素:

v[0] = 10;
v[1] = 11;
v[2] = 12;

这要求vector至少有三个元素。如果你像这样声明:

vector<int> v(3); 

它有三个元素,很好。如果你像这样声明:

vector<int> v;

则没有元素,因此上述访问无效。如果你想创建一个空的vector然后添加元素到它,使用push_back:

v.push_back(10);
v.push_back(11);
v.push_back(12);

当您声明vector<int> a时,它的大小为0,因此访问向量的元素将产生错误。在这种情况下,您必须使用push_back来添加元素:

v.push_back(10); // instead of v[0] = 10;

您也可以使用vector::at代替[]运算符来执行容器边界检查。如果你越过它们,它会抛出out_range_exception