【发布时间】:2019-07-19 18:29:15
【问题描述】:
请考虑以下代码:
struct X
{
int x1;
int x2;
};
struct Y
{
int y1;
struct X *x;
};
现在我动态分配内存如下:
struct Y *y = new Y[N];
对于这个结构体数组的每个元素,我也在为y[i].x分配内存,如下-
y[i].x = new X[M];
在这种情况下,在知道y[i].x的实际内存大小之前,系统如何为y分配内存。
在这种情况下,我遇到了分段错误。有什么好的方法来动态分配内存吗?如果我需要重新分配内存(动态增加数组大小)怎么办?
【问题讨论】:
-
x的大小总是一样的,是一个指针 -
你想使用
std::vector。 -
每当您想到“动态数组”时,您的下一个想法几乎应该总是是
std::vector。 -
@someprogrammerdude 人类就像向量。我们有时会扩张,但收缩是困难的。
-
vector不仅仅是一个花哨的动态数组。请注意,您的struct Y以多种方式损坏。它可以被复制,但如果你这样做了,就会发生坏事。它可以与自动存储一起使用,但是当它超出范围时会泄漏内存。获得正确的动态内存分配需要更多的时间,你不想每次都重写,因为其他人已经为你做了:std::vector
标签: c++ structure dynamic-memory-allocation