【发布时间】:2021-08-09 03:44:35
【问题描述】:
我目前有一个结构 Struct1,它有一个指向 Struct2 的指针,该指针根据代码中的某些条件被多次分配。我试图以test->Struct2Pair[i] = malloc(sizeof(struct Struct2));这种方式分配它,但它似乎失败了。知道我做错了什么吗?
这是我正在尝试做的简化版本。
struct Struct2 {
int x;
int y;
};
struct Struct1 {
struct Struct2 *Struct2Pair;
int val;
};
int main()
{
struct Struct1 *test = malloc(sizeof(struct Struct1));
for ( int i = 0; i < 5; i++ )
{
test->Struct2Pair[i] = malloc(sizeof(struct Struct2));
}
return 0;
}
谢谢!
【问题讨论】:
-
Struct2Pair未初始化——你不能像一个有效的数组一样开始给它赋值。至少,您需要test->Struct2Pair = malloc(5 * sizeof(struct Struct2));,它为struct Struct2类型的5 个元素分配内存。但是,如果您只想对数组进行硬编码,为什么不首先将其定义为struct Struct2 Struct2Pair[5];? -
@paddy 就像我说的那样,5 只是一个例子。该数字根据一些输入和一些计算是可变的。我只想知道每次满足某些条件时如何 malloc test->Struct2Pair 。可以是 1... 可以是 100。我不确定该怎么做。
-
@JaneDoe:当您执行
test->Struct2Pair[i]时,您正在尝试获取Struct2Pair的访问内存位置,这并没有指向任何有意义的东西。 -
如果您需要知道数组包含多少项,那么您需要将该值存储在某处(可能是
Struct1中的一个额外变量)。否则,您无法知道数组是否足够大(如果您打算稍后使用realloc或其他方式调整它的大小)。我坚持关于如何使用malloc分配数组的评论。你这样做是错的。这里唯一的修改是使用可变大小而不是硬编码5,并将值存储在某处。 -
它是运行时的,在分配 Struct2Pair 时是未知的。如果满足某些条件,它会不断地被一一分配。在这种情况下,您的解决方案是否仍然有效?