首页 > 解决方案 > 在 C++ 中如何为数组分配大小?

问题描述

如果我们用 4 个元素初始化数组,例如:

int array[4];

我们可以像这样分配值吗,因为它也需要 4 个值:

for(int i=5;i<9;i++){    
    cin>>array[i];
}

标签: c++

解决方案


对数组的越界访问具有未定义的行为,这是“意外后果”的另一种说法:

int a[4];
int b[4];

for(int i=5;i<9;i++){
  a[i] = i;
}

在调试器中观察它在做什么,特别是观察b.

这可能会或可能不会崩溃,但它仍然是损坏的代码。C++ 不会总是提醒您这种情况,作为开发人员,您有责任了解在访问某些结构时允许和不允许什么。

越界访问数组并不总是会导致崩溃,但它总是会出现问题。试试i = 999999ori = -9看看会发生什么。

未定义行为的问题在于它可能看起来有效,但这些意想不到的后果最终会赶上你。这使得调试代码变得非常困难,因为这种越界写入可能会在最初的错误发生几分钟或几小时后在其他地方踩到你需要的变量,然后你的程序崩溃。这类错误是最令人恼火的,因为因果之间的时间非常长。

这就像把点燃的火柴扔进垃圾箱可能不会每次都引起火灾一样,但当它确实引起火灾时,你可能不会注意到,直到为时已晚。在 C++ 中,您必须非常警惕不要在代码中引入未定义的行为。


推荐阅读