分配一个带整数的指针

时间:2015-12-16 00:39:40

标签: c++

我遇到了问题

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;不给我一个错误?感谢

2 个答案:

答案 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],那么很可能您的程序将崩溃(很可能是,因为访问未分配的内存时的行为未定义)。