C++ 输出的第一部分是正确的,然后我得到一个分段错误?

C++ 输出的第一部分是正确的,然后我得到一个分段错误?,c++,c++11,C++,C++11,我试图使用函数输出向量的值。“gv”输出的值,但当尝试输出第二个向量“vv”时,我得到分段错误。有人能帮我了解到底发生了什么以及为什么我会犯这个错误吗。我的程序的哪一部分也会发生这种情况。谢谢另外,我正在使用基于linux服务器的putty编译器 #include <iostream> #include <vector> #include <string> #include <exception> #incl

我试图使用函数输出向量的值。“gv”输出的值,但当尝试输出第二个向量“vv”时,我得到分段错误。有人能帮我了解到底发生了什么以及为什么我会犯这个错误吗。我的程序的哪一部分也会发生这种情况。谢谢另外,我正在使用基于linux服务器的putty编译器

    #include <iostream>
    #include <vector>
    #include <string>
    #include <exception>
    #include <cmath>
    #include <limits>
    using namespace std;

    vector<int>gv{1, 2, 4, 8, 16, 32, 64, 128, 256, 512}; //global vector

    void f(vector<int>a) //function f that takes in a vector argument
    {
        vector<int>lv(10);

            for(int i=0;i<10;i++){ //loop that sets values of gv to lv
                lv[i] = gv[i];
                cout<< lv[i]<<endl;
            }

         cout<<'\n';

        vector<int>lv2 = a; //loop that assigns the values of the argument vector to lv2
            for(int i = 0; i<10; i++){
            cout<< lv2[i]<<endl;
            }

    }

    int main() {

    f(gv); //function that uses the global variable gv

    vector<int>vv(10); //creating a new vecotr vv

        for(int i = 1; i<11;++i){ //loop to assign values of the first ten factorials
            vv[0] = 1;
            vv[i] = vv[i-1]*(i+1);
        }
    f(vv); //function using vv
    }
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
向量gv{1,2,4,8,16,32,64,128,256,512}//全局向量
void f(vectora)//接受向量参数的函数f
{
向量lv(10);

对于(int i=0;i而言,问题在于,当您创建向量时,您不会将大小传递给构造函数,因此默认情况下它为零

vectorvv;//创建新的vecotr vv

然后,当您尝试在
vv
中循环时,您正在访问您不拥有的内存

此外,在c/c++中,从语法上讲,括号通常是这样做的:

for(int i = 0; i < NUM; i++)
{
   // Do stuff...
}
for(int i=0;i
而不是Java方式,如:

for(int i = 0; i < NUM; i++){
   //Do stuff...
}
for(int i=0;i
向量
在索引时不会自动增长,如果要将项目附加到向量末尾,请使用
推回
。这将在向量需要增长时扩展向量

std::vector<int> vv = {1}; // initializes the vector with one element
for(int i = 1; i < 11; ++i){
    vv.push_back(vv[i-1]*(i+1));
}
使用
lv
gv
的循环也可以重写为基于范围的循环 向量lv(10)


使用
at
而不是
[]
时,您会很快发现问题。您也不应该在循环中硬编码大小,而是使用
.size()
,或者因为这是C++11,一个基于范围的for循环。另外,在C/C++中,语法上括号通常是这样做的…false。这是奥尔曼风格,这在当今是不常见的。这不是闻所未闻的,但肯定不是标准。我明白你的意思。因此我更改了向量vv,使其大小为10。但当我运行它时,我得到了错误“glibc”检测到的
std::vector<int> vv(10); // constructors a vector with 10 elements (all set to 0)
std::vector<int> vv = {1};
for(int i = 1; i<11;++i) {
    vv.push_back(vv.back() * (i+1));
}
for(auto&& i : gv) {
    lv.push_back(gv[i]);
    std::cout<< i << '\n';
}
auto lv = gv;
auto lv2 = a;