C ++:对象中奇怪的数组行为 - 元素是可访问的,未初始化

时间:2015-05-07 19:03:26

标签: c++ arrays object

我创建了一个只包含数组的对象。由于我的代码中存在拼写错误,我访问了数组中的一个元素,该元素不应该是可访问的,它甚至不应该存在,但不知何故它仍然有效。

这是我的课程代码:

class double_stor
{ 
  public:
  double * d_str; 
  double_stor(int size) { d_str = new double[size];}
}

好的,现在它变得奇怪了:

double_stor foo = double_stor(10);
foo.d_str[20] = 100;

foo.d_str [20]是可写和可读的。怎么会这样?我的意思是,我用给定的大小初始化了数组,据我所知的数组,只有空间被阻塞,我在初始化期间定义了?

我只知道Matlab中的这种行为,如果给定的数组太小,新的数组会自动初始化。但我猜C ++没有这个"功能"。你们知道为什么我没有收到错误信息以及如何关闭这种行为?我不希望有可能访问未初始化的元素。

感谢您的帮助!

编辑:好的,我想我明白了。当我初始化数组时,不仅空间被阻塞,我真正需要它,但它也会得到一个偏移量,具体取决于存储它的内存块大小。所以我可以访问元素,但它有点像赌博。我永远不知道会发生什么。如果你想让你的程序稳定运行,那么精华就是,永远不要这样做。 (感谢Mat纠正我)。感谢Fredrik Pihl,他写了一个很好的例子。您可以在帖子中找到它,它与我的链接或在评论中是dmaij的链接,这也解释了它非常详细。

0 个答案:

没有答案