我遇到了问题
struct bin
{
int *vector;
bin *next;
};
bin *v = new bin;
在我的一个函数中:
v->vector = new int[3];
// etc.
我的想法是:如果我放v->vector[20] = 3;
它正在工作,我不知道为什么,因为我预计会有错误。我想我不明白v->vector = new int[1];
正在做什么。我认为它为向量分配了3个int:v->vector[1],v->vector[2],v->vector[3]
。有人可以向我解释为什么v->vector[20]=3;
不给我一个错误?感谢
答案 0 :(得分:2)
它不起作用。它给出了“未定义的行为” - 你已经写入了你不应该拥有的内存。 C ++没有数组边界检查,如果你需要它,你必须自己做,也许是通过在结构中添加大小?
struct bin
{
int *vector;
int vectorSize;
bin*next;
};
此外,C ++将数组从0而不是1索引,因此可以通过以下方式访问您拥有的项目:v->vector[0]
,v->vector[1]
和v->vector[2]
最后但并非最不重要的是,当已经有一个非常常见的c ++向量类时调用它vector
可能会有点令人困惑。您可以随时查看现有的stl::vector
课程,无论如何都可以完成您的工作。
答案 1 :(得分:-2)
我假设你在高级操作系统(Windows,Linux)上运行你的应用程序? 默认情况下,您的进程将映射一定数量的物理内存。
当您为vector[]
分配时,系统会从默认物理内存映射的内存中分配内存(性能优化)。
当你开始通过vector []时,只要你在有效的内存地址内,你的程序就不会崩溃。
如果您尝试读取/写入向量[33776],那么很可能您的程序将崩溃(很可能是,因为访问未分配的内存时的行为未定义)。