Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;/是否允许更改静态数组的大小?_C++_Arrays_Static Array - Fatal编程技术网

C++ C++;/是否允许更改静态数组的大小?

C++ C++;/是否允许更改静态数组的大小?,c++,arrays,static-array,C++,Arrays,Static Array,根据正确答案,在静态数组中有固定大小 但是,这可以很好地编译和运行: int main(int argc, char** argv) { int myArray[2]; myArray[0] = 0; myArray[1] = 1; cout<<myArray[0]<<endl; cout<<myArray[1]<<endl; myArray[4]; myArray[2] = 2; myArray[3] = 3; cout<<

根据正确答案,在静态数组中有固定大小

但是,这可以很好地编译和运行:

int main(int argc, char** argv) {

int myArray[2];

myArray[0] = 0;
myArray[1] = 1;

cout<<myArray[0]<<endl;
cout<<myArray[1]<<endl;

myArray[4];

myArray[2] = 2;
myArray[3] = 3;

cout<<myArray[2]<<endl;
cout<<myArray[3]<<endl;

return 0;
}
int main(int argc,char**argv){
int-myArray[2];
myArray[0]=0;
myArray[1]=1;

cout不,绝对不可能。你所做的只是在它的边界之外非法访问它。这恰好没有为你抛出错误这一事实是完全无关的。它完全是UB。

首先,这不是一个静态数组,它是在自动存储中分配的数组

其次是

myArray[4];
不是新的声明,它是从先前声明的2元素数组的元素#4中丢弃的读取-未定义的行为

接下来的作业

myArray[2] = 2;
myArray[3] = 3;

写入未分配给程序的内存-这也是一种未定义的行为。

实际上并不是在扩大数组。让我们详细了解您的代码:

int myArray[2];

myArray[0] = 0;
myArray[1] = 1;
您创建了一个包含两个位置的数组,索引范围为0到1。到目前为止,一切正常

myArray[4];
您正在访问数组中的第五个元素(数组中肯定不存在的元素)。这是未定义的行为:任何事情都可能发生。您没有对该元素执行任何操作,但这并不重要

myArray[2] = 2;
myArray[3] = 3;
现在您正在访问元素3和元素4,并更改它们的值。同样,这是未定义的行为。您正在更改所创建数组附近的内存位置,但“没有其他内容”。数组保持不变

实际上,您可以通过执行以下操作来检查阵列的大小:

std::cout << sizeof( myArray ) / sizeof( int ) << std::endl;

std::cout No,它不是偶然失败的。这取决于您使用的是什么。Visual Studio识别出这是一个错误,我得到
运行时检查失败#2-变量“myArray”周围的堆栈已损坏。
但更重要的是,dasblinkenlight说出了我要说的话。这是myArray上的一个虚拟读取[4]这不是一个声明/resize@acidzombie24cool-VS隐式使用堆栈保护。仅供参考,学习如何使用stack/deque/map/set是一个好主意。AI打算发布这篇文章,但想确认他的代码对我来说确实失败了(确实失败!)为什么这不是一个静态数组?我如何才能使它成为一个静态数组?@KorayTugay:
static int myArray[2]有两种方法可以创建一个静态数组——在任何函数外部声明它,在没有关键字
static
的情况下使用ot,或者在函数内部声明关键字
static
。哦,是的,我应该说“静态声明数组”谢谢。我最好的猜测是,在大多数机器上,包括所有
x86
s@KorayTugay未定义的行为。这意味着任何事情都可能发生,编译器不需要报告有关的错误it@KorayTugay未定义的行为。不能排除机器着火的可能性。