用整数分配指针

allocate a pointer with integers

本文关键字:指针 分配 整数      更新时间:2023-10-16

有问题

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

它不起作用。它给出了"未定义的行为"——你已经把不该有的东西写进了记忆中。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类,该类无论如何都可以满足您的需要。

我假设您在高级操作系统(Windows、Linux)上运行应用程序?默认情况下,您的进程将映射一定数量的物理内存。

当您为vector[]进行分配时,系统会从默认映射的物理内存中分配内存(性能优化)。

当你开始通过vector[]时,只要你在有效的内存地址内,你的程序就不会崩溃。

如果您尝试读取/写入矢量[33776],那么您的程序很可能会崩溃(很可能,因为访问未分配内存时的行为是未定义的)。