输出的第一部分是正确的,然后我得到了一个分段错误
first part of output is correct then I get a segmentation fault?
我正在尝试使用函数输出向量的值。"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
}
vector
s在索引到时不会自动增长,如果要将项附加到向量的末尾,请使用push_back
。这将在矢量需要增长时对其进行扩展。
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));
}
如果要以特定大小启动向量,可以使用带参数的构造函数。
std::vector<int> vv(10); // constructors a vector with 10 elements (all set to 0)
此外,如果您希望检查您的访问,则可以使用vv.at(i)
而不是vv[i]
。如果使用无效索引,则使用at
将抛出std::out_of_range
。
我可以建议使用back
而不是索引,这将把你的循环变成:
std::vector<int> vv = {1};
for(int i = 1; i<11;++i) {
vv.push_back(vv.back() * (i+1));
}
使用lv
和gv
的循环也可以重写为基于范围的循环矢量(10);
for(auto&& i : gv) {
lv.push_back(gv[i]);
std::cout<< i << 'n';
}
但如果这就是你所需要的,那么你可以通过以下操作复制向量,而不是循环。
auto lv = gv;
auto lv2 = a;
问题是,当您创建向量时,您不会将大小传递给构造函数,因此默认情况下为零。
vector<int>vv; //creating a new vecotr vv
然后,当你试图循环使用vv
时,你正在访问你不拥有的内存。
此外,在语法上,在c/c++中,括号通常是这样做的:
for(int i = 0; i < NUM; i++)
{
// Do stuff...
}
而不是像这样的Java方式
for(int i = 0; i < NUM; i++){
//Do stuff...
}
相关文章:
- 试图修复一个错误,该错误不会让我开始编程其余部分
- MSVC 无法根据模板参数进行数学运算,这是一个错误吗?
- 我正在尝试一个傻瓜 C++ 练习,我遇到了一个错误,说类 'GraduateStudent' 没有任何名为 'advisor' 的字段
- 零四元数和任何向量都不为零的特征积,这是一个错误吗?
- 处理程序的模块列表中有一个错误的模块"WebSocketModule"
- 在 C++ 中使用 "transform" 会给出一个错误,指出这未在作用域中声明
- 在Cython中使用C库时,我遇到了一个错误
- 我需要帮助创建一个评分系统,但它一直给我一个错误,注释掉的整数是给我带来麻烦的部分
- 我试图用c++编写递归fibonacci序列,但当我编译时,我遇到了一个错误
- 从system()调用G++会返回一个错误
- 在Visual Studio中,与std::async一起使用时不调用"thread_local"变量"析构函数,这是一个错误吗?
- 我收到一个错误无效的操作数,类型为 const char [42] 和二进制"运算符+"的双倍数
- 使用声明:GCC 和 Clang 的另一个错误?
- 全球免费给出一个错误.调试器不解释
- 相对于继承的构造函数,gcc 编译器是否还有一个错误?
- 为什么直接传递"this"指针来存档是一个错误,而另一个相同类型的指针是可以的?
- 为什么第三板有一个错误
- 如何编写一个错误结构,该结构可以包含不同的强键枚举作为错误代码
- 使用本地类型声明的G lambda被使用但从未定义 - 确实是一个错误
- 我需要在 Android Studio 中构建 NDK. 但它返回一个错误