这段代码有什么问题,它崩溃了
What's wrong with this code, It's crashing
#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;
}
仅使用vector和long long作为对象类型。打印不出任何东西并崩溃。为什么?我需要调整数组的大小吗,还是有别的问题。
vector < long long > arr;
不为您的变量分配任何空间。它只是声明了一个向量。或者使用arr.resize(MAX_SIZE);
,其中MAX_SIZE
是i
的某个最大值,您永远不会越过,或者使用arr.push_back(...)
代替arr [ ... ] = ...
你的代码的工作版本:
#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;
}
vector < long long > arr; arr [ 0 ] = 1; arr [ 1 ] = 2;
创建一个空向量,然后尝试设置它的第一个和第二个元素。一旦点击arr [ 0 ]
,程序的行为是未定义。崩溃只是其中一个可能的结果。你的程序被允许做任何。
必须将vector初始化为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
的章节。您的编译器可能还提供了一些方法来启用对标准容器的运行时检查,以将可能的崩溃转变为保证的崩溃。
相关文章:
- 类对象数组的问题会导致崩溃
- 排序算法问题(购买商店物品)(崩溃)
- 删除数组 c++ 崩溃问题
- 运行简单的.oct文件时Octave崩溃,我的代码出了什么问题?
- 需要有关在qt c ++应用程序中使用崩溃问题的建议
- InterlockedCompareExchange Android 崩溃问题
- 在发布模式下崩溃,但如果可调试为 true - 不是..什么是可能的问题
- 是否有可能存在不会崩溃程序的内存问题
- NDK 问题:在 32 位上崩溃,在 64 位上不一致
- C++ReadFile崩溃问题
- 创建'new'实例可以解决析构函数崩溃问题?
- 这个C++代码有什么问题?它在运行时崩溃
- 简单程序没有输出和崩溃.我的解决方案有什么问题
- 我有一个 c++ 代码,它在启动时崩溃,然后到达问题所在 main() 的执行
- C++多个程序问题(rand、转换、崩溃)
- Taglib:性能和崩溃问题
- 崩溃:字符串问题
- 尝试创建队列 - C++崩溃的问题
- 崩溃,可能是由于构造函数或析构函数中的某些问题
- 在UWP应用程序中使用DataTemplate时的问题(崩溃,未设置数据)