C++ 数组的简单代码给了我一个运行时错误
我无法理解为什么在我尝试运行它时,此代码会中断。 我使用GCC编译器C++ 数组的简单代码给了我一个运行时错误,c++,gcc,C++,Gcc,我无法理解为什么在我尝试运行它时,此代码会中断。 我使用GCC编译器 #include <iostream> using namespace std; int main() { int arr[] = {0}; for(int x=0; x<6; x++) arr[x] = x; for(int y=0; y<6; ++y) cout<< "arr[" << y <<"] =
#include <iostream>
using namespace std;
int main() {
int arr[] = {0};
for(int x=0; x<6; x++)
arr[x] = x;
for(int y=0; y<6; ++y)
cout<< "arr[" << y <<"] = " << arr[y] << endl;
return 0;
}
#包括
使用名称空间std;
int main(){
int arr[]={0};
for(int x=0;xint arr[]={0};
声明一个数组,其中只有一个元素。因此,该数组中唯一有效的索引是arr[0]
。尝试按任何非零整数进行索引将导致未定义的行为。您需要
int arr[6];
要声明包含6个元素的数组,错误在以下行中:
int a[]={0};
通过此操作,您创建了一个仅由一个元素组成的数组,稍后您将尝试访问6个元素。将上述行替换为:
有一种方法可以实现你想要做的事情。有几种方法可以实现你的愿望。有些是C风格的,有些是用C++ STL容器的。我用4种不同的方式重新编写代码来显示差异。C静态大小的数组和C++静态大小的类(编译时必须知道大小),C动态大小数组。(这些将被分配到堆上,C++动态大小向量)。
#include <iostream>
#include <vector>
#include <array>
using namespace std;
int main() {
// C style Static sized array
int arr_sty_1[6];
for(int x=0; x<6; x++)
arr_sty_1[x] = x;
for(int y=0; y<6; ++y)
cout<< "arr_sty_1[" << y <<"] = " << arr_sty_1[y] << endl;
// C++ style Static sized array
array<int, 6> arr_sty_2;
for(int x=0; x<6; x++)
arr_sty_2[x] = x;
for(int y=0; y<6; ++y)
cout<< "arr_sty_2[" << y <<"] = " << arr_sty_2[y] << endl;
// C style dynamic sized array
int* arr_sty_3 = new int[6];
for(int x=0; x<6; x++)
arr_sty_3[x] = x;
for(int y=0; y<6; ++y)
cout<< "arr_sty_3[" << y <<"] = " << arr_sty_3[y] << endl;
// C++ style dynamic size vector (dynamic array ish)
vector<int> arr_sty_4;
for(int x=0; x<6; x++)
arr_sty_4.push_back(x);
for(int y=0; y<6; ++y)
cout<< "arr_sty_4[" << y <<"] = " << arr_sty_4[y] << endl;
return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
//C型静态大小数组
int arr_sty_1[6];
对于你是否已经阅读了一个关于数组的C++基础教科书?你在声明一个只有1个元素的数组,然后你试图写一个值到它的第6个元素。它显然不会工作。<代码> ARR < /C>自动分配,大小为0,它不是动态的。在你的例子中,数组的大小需要知道。只能写int-arr[6]如果你最终遇到了一个你不一定知道数组大小的情况,你可以先看一下 STD::vector < /Cord>。不知道下一个投票是什么,但是我有一个小的黑板:C++定义了动态存储,这样就不需要堆了。堆是一个通用的实现,很可能是所有的MOS。t程序员永远不会看到,但它不是唯一的实现。