为什么我在这个问题上有隔离错误
why am I getting seg fault in this?
问题陈述
Mark是一名本科生,他对轮岗很感兴趣。镇上正在进行一场传送带比赛,马克想赢。在比赛中,有一条传送带,可以表示为1xN块的条带。每块木块上都写着一个数字。皮带以这样的方式旋转,每次旋转后,每个块都向左移动,第一个块移到最后一个位置。
输送带附近有一个开关,可以使输送带停止。每个参与者将有一次机会停止皮带,并计算他的PMEAN。
PMEAN是使用皮带停止时在皮带上的顺序计算的。PMEAN最高者为优胜者。可以有多个赢家
马克想成为赢家之一。
他应该努力得到什么才能保证他成为赢家?定义- PMEAN = (i = 1到n的总和)(i * i列表中的数字)式中I为输送带停止时,输送带处的块的索引。索引从1.
- 第一行包含N,表示皮带上的元素数量。
- 第二行包含N个空格分隔的整数。
- 输出所需的PMEAN
- 1≤n≤10^6
- -10^9≤每个数字≤10^9
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main (void)
{
int n;
cin>>n;
vector <int> foo;
int i = 0,j = 0,k,temp,fal,garb=0;
while (i < n)
{
cin>>fal;
foo.push_back(fal);
i++;
}
vector<int> arr;
//arr.reserve(10000);
for ( i = 0; i < n; i++ )
{
garb = i+1;
arr.push_back(garb);
}
long long product = 0;
long long bar = 0;
while (j < n)
{
i = 0;
temp = foo[0];
while ( i < n-1 )
{
foo[i] = foo[i+1];
i++;
}
foo[i] = temp;
for ( k = 0; k < n; k++ )
bar = bar + arr[k]*foo[k];
if ( bar > product )
product = bar;
j++;
}
return 0;
}
我的问题:
我所做的基本上是尝试原始数组的不同组合,然后将其与包含值1 2 3 ......
的数组相乘,然后返回最大值。然而,我在这得到一个分割错误。
为什么会这样?
下面是你的一些代码:
vector <int> foo;
int i = 0;
while (i < n)
{
cin >> fal;
foo[i] = fal;
i++;
}
当您执行foo[0] = fal
时,将导致未定义行为。foo
中还没有[0]
的空间。你可能想用std::vector::push_back()
代替。
在vector<int> arr;
作为题外话,人们通常会用for循环来写这个循环:
for (int i=0; i<n; i++) {
int fal;
cin >> fal;
foo.push_back(fal);
}
关于更新后的代码:
- 永远不要在第一个循环中增加
i
。 -
garb
从未初始化。
相关文章:
- 从矢量中删除元素后出现隔离错误
- 在 gtest 中初始化堆栈上的引用变量的隔离错误
- 线程时访问静态映射时出现隔离错误
- 并行快速排序分区中的隔离错误
- C++多线程程序:变量定义为类成员的隔离错误
- TFLite 隔离错误,通过获取C++输入和输出
- 我只是在寻找模板,在我的书中找到了这段代码,这显示了隔离错误?
- pthread_create中错误 4 的隔离错误
- 递归树遍历/分支删除的隔离错误
- 在类模板上使用 arm gcc 编译期间的隔离错误
- 从大量文件读取时出现隔离错误
- 在PHP扩展中使用emalloc从线程时出现隔离错误
- 通过 Boost Python 在C++对象之间传递共享指针的隔离错误
- 在QT中单击菜单时出现隔离错误
- 尝试访问标头声明成员时出现隔离错误
- 搜索链表时出现隔离错误
- 模板化子类析构函数中的隔离错误
- 插件中节点.js/Nan 回调C++不频繁的隔离错误
- 将行添加到 GTKTreeView 时的隔离错误
- 找不到命令时打开的隔离错误