C 在结构数组中为每个元素(struct)分配堆内存
C++ Assigning heap memory to each element(struct) in array of structs
我对将内存分配给结构感到非常困惑。
考虑这个。
struct A {
....
}
A* array = new A[5];
// here I am trying to assign memory to array[0]
&(array[0]) = new A; << error
但这给我一个错误
lVALUE所需的作业左操作数
我不确定如何将struct A
的内存分配给array[0]
。
预先感谢您。
类型A*
不能容纳应用new
单独分配的指针。A*
是一个连续的内存块,它具有1个或更多完整的实例。
这意味着
A* array = new A[3];
将分配
之类的东西| A | A | A |
每个"单元"将是大的sizeof(A)
字节。因此,在您的情况下,您已经有5个A
实例了,这些实例将已经构造。
如果您想将分配在堆上分配的实例,那么您不需要A*
而不是A**
。
A** array = new A*[3];
这创建了一个连续的3个A*
元素,这是A
的指示:
| A* | A* | A* |
AD每个单元格是大sizeof(A*)
。
现在,您可以分配给数组的元素,一个在堆上分配的特定实例。例如:
array[0] = new A();
产生
之类的东西| A* | ...
|
|
--> | A |
定义:
A* array = new A[5];
您有一个A数组。因此,您的五个A所需的内存已分配。
您可以直接使用数组[0]等直接访问元素
如果要在A上定义指针数组:
A **array = new A*[5];
然后,您必须使用:
分配内存array[0] = new A;
其他答复并没有错,但我只想提供一些一般建议:
切勿在C 中使用新的。新是仅在编写库代码时极少数情况下需要的低级功能。
也从不使用C 中的C风格数组。如今,标准库中有更好的选择。我的猜测是您应该使用std :: vector(或者也许是std :: array)。现在,您可以与价值充分合作并避免指针。
您应该在指针和数组之间明确差异
A* pointer = new A[2];
A* array[2] = { new A,new A };
看起来像这样。
memory
---
pointer => A
---
A
---
---
array[0]=> A
---
...
---
array[1]=> A
---
数组可以保存几个值。因此,您应该使用**,*[n]。
struct A {
....
}
A* array = new A[5];
array = new A; << this will work ,but new A[5] will lost
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- boost :: Spirit属性分配:struct is_nullary:基本类型无法成为结构或类型
- C 在结构数组中为每个元素(struct)分配堆内存
- 在struct和main中分配内存的区别
- 在struct[]中分配char*指针值(结构成员)的最优化方法
- 为结构成员分配的内存是连续的吗?如果struct成员是数组呢?
- 内存分配问题传递/返回Struct *数组
- 不能将 "Struct*" 类型的值分配给类型 "Struct*" 的实体