这段代码出了什么问题,它崩溃了

时间:2015-10-09 12:36:39

标签: c++ stdvector

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector < long long > arr;
    arr[0] = 1;
    arr[1] = 2;
    long long sum = 0;
    int i = 2;  

    do
    {
        arr[i] = arr[i - 1] + arr[i - 2];
        if (arr[i] % 2 == 0)
            sum += arr[i];
        ++i;
    } while (arr[i] < 4000000);

    cout << sum << endl;

    return 0;
}

只需使用矢量和长对象类型。没有任何打印和崩溃。为什么?我是否需要调整阵列大小,否则问题就是其他问题。请帮帮我。

3 个答案:

答案 0 :(得分:1)

vector < long long > arr;没有为您的变量分配任何空间。它只是声明了一个向量。使用arr.resize(MAX_SIZE);,其中MAX_SIZE是您永远不会跨越的i的最大值,或使用arr.push_back(...)代替arr [ ... ] = ...

答案 1 :(得分:1)

代码的工作版本:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector < long long > arr(2);
    arr[0] = 1;
    arr[1] = 2;
    long long sum = 0;
    int i = 1;

    do
    {
        ++i;
        arr.push_back(arr[i - 1] + arr[i - 2]);
        if (arr[i] % 2 == 0)
            sum += arr[i];
    } while (arr[i] < 4000000);

    cout << sum << endl;

    return 0;
}

答案 2 :(得分:0)

 vector < long long > arr;
 arr [ 0 ] = 1;
 arr [ 1 ] = 2;

您创建一个空向量,然后尝试设置其第一个和第二个元素。一旦arr [ 0 ]被击中,您的程序的行为就会未定义。崩溃只是一种可能的结果。您的程序可以任何

您必须将矢量初始化为大小为2或在初始化后添加元素。

vector < long long > arr(2);
arr [ 0 ] = 1;
arr [ 1 ] = 2;

或者:

vector < long long > arr;
arr.push_back(1);
arr.push_back(2);

我建议您查看您正在阅读的书中有关std::vector的章节。您的编译器可能还提供了一些方法来启用标准容器的运行时检查,以将可能的崩溃转换为有保证的崩溃。

相关问题