gpt4 book ai didi

c++ - 具有动态分配结构数组元素的动态分配结构数组

转载 作者:太空狗 更新时间:2023-10-29 23:43:17 26 4
gpt4 key购买 nike

请考虑以下代码:

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分配内存。

在这种情况下,我遇到了段错误。有什么好的方法可以动态分配内存吗?如果我需要重新分配内存(以动态增加数组大小)怎么办?

最佳答案

In such case, how does the system will allocate memory for y before knowing the actual memory size of y[i].x.

哦,但它确实知道 y[i].x 的大小。该成员的类型是 struct X*,它是一个指针。指针的大小因体系结构而异,但通常为 64 位中的 32 位。不管 X 是什么(很少有像函数指针这样的边缘情况)。

换句话说,X 不是 Y 的一部分。实际上 Y 有一个指针,指向被(可能是多个)X 占用的一 block 内存。

这就像有一个地址。你可以把它写在一张小纸上并保存下来。每个人都知道纸张的大小。无论有多少(和多大)房屋占据实际位置。

您的段错误与所有这些无关。很可能你已经越过了一些界限。但如果没有实际代码,很难说清楚。

关于c++ - 具有动态分配结构数组元素的动态分配结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54881676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com