我对如何制作结构数组感到困惑。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct line
{
int x;
} *line;
int main()
{
line *array = malloc(10 * sizeof(line));
int i = 0;
for(i; i < 2; i++)
{
array[i]->x = 5;
}
for(i; i < 2; i++)
{
printf("%dn", array[i]->x);
}
return 0;
}
我的混乱来自以下内容:从我的理解中,如果您有一个Typedef并将其命名为指针EG *行,则可以使用 ->符号访问和突变结构中的每个项目。我似乎不正确,不确定为什么。
我的错误:
分割故障(核心倾倒)
您 typedef
line
是指向结构的指针,而不是结构本身。因此,当您基于sizeof line
的malloc
-ED时,您可以获得十个指针的空间,而不是结构的十本。在typedef
中的line
之前卸下*
,因此您会得到一系列结构,而不是(未分配的)指针到struct。然后,您将在索引指针后使用普通的点访问。
如果您实际上想要一系列指针构造,则需要单独分配每个结构,这可能不是您想要的。
在这里,将其修复为ya:
#include <stdio.h>
#include <stdlib.h>
typedef struct line
{
int x;
} Line;
int main()
{
Line* array = malloc(10 * sizeof(line));
int i = 0;
for(i; i < 2; i++)
{
array[i].x = 5;
}
for(i; i < 2; i++)
{
printf("%dn", array[i].x);
}
return 0;
}
您几乎拥有它,您只需要调整语法或为每个结构分配更多内存:
#include <stdio.h>
#include <stdlib.h>
typedef struct line
{
int x;
} *line;
int main()
{
line *array = malloc(10 * sizeof(line));
int i = 0;
for(i; i < 2; i++)
{
// XXX HERE YOU ALLOCATE MORE MEMORY
array[i] = malloc(sizeof array[i]);
array[i]->x = 5;
}
// XXX RESET "i" TO ZERO
for(i=0; i < 2; i++)
{
printf("%dn", array[i]->x);
}
return 0;
}
您再也不会重置i
数组索引变量。