用整数分配指针
allocate a pointer with integers
有问题
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],那么您的程序很可能会崩溃(很可能,因为访问未分配内存时的行为是未定义的)。
相关文章:
- 将指针分配给另一个指针时会发生什么情况?
- C++将一个指针分配给另一个指针时执行的类型检查
- 我似乎无法为指针分配一个数组,然后更改数组的内容
- C++为 void 指针分配一个字符串
- 当我在 C++ 中将派生类的指针分配给指针时,地址会更改
- MPI 集合通信中的指针分配
- 函数指针分配在创建 DLL 后导致错误
- 通过双指针分配指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 我可以直接为指针分配地址吗?如果是,如何做到这一点
- 为什么为char指针分配内存不会截断char序列
- C++指针分配字符数组的地址
- 将 void 指针分配给另一个 void 指针
- 如何将不同的成员函数指针分配给注册类的不同实例?
- 如何为指针分配特定的内存地址?
- C++ - 无法将顶部常量指针分配给另一个非常量指针
- 将指针分配给另一个指针时会发生什么情况?
- 为指向C++中的对象/对象的指针分配堆内存
- 将指针分配给字符串变量中包含的地址
- 当直接分配时,为什么此功能指针分配起作用,而不是与有条件的操作员一起使用