我创建了一个只包含数组的对象。由于我的代码中存在拼写错误,我访问了数组中的一个元素,该元素不应该是可访问的,它甚至不应该存在,但不知何故它仍然有效。
这是我的课程代码:
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的链接,这也解释了它非常详细。