在C中定义结构数组?

时间:2011-11-13 17:48:12

标签: c data-structures

main.h

#define  DATA  struct   data
DATA
{
  int id;
  char data;
}

的main.c

DATA *listOfData[100];

所以在这一点上我将/应该能够像这样访问列表中的DATA:

printf(listOfData[5]->data);

这不是让我这样做的,运行只是在最后一次打印时冻结......没有任何错误或任何错误。

3 个答案:

答案 0 :(得分:2)

这是因为你已经定义了一个指针数组。但你从来没有初始化任何指针。

因此:

printf(listOfData[5]->data);

将崩溃(未定义的行为),因为您在索引5处取消引用(无效)指针。

*(这是定义结构的一种非常奇怪的方式......)

要解决此问题,您需要为数组中的每个指针分配。如果你实际上并不需要它是一个指针数组,那么最好只使它成为结构本身的数组:

DATA listOfData[100];

并将其视为:

listOfData[5].data

然后你不必处理分配每个元素。

答案 1 :(得分:1)

我不确定为什么printf会冻结,但这有几个问题。首先,DATA*数组中的所有指针都未初始化。您可能打算创建一个DATA数组,而不是DATA指针数组:

DATA listOfData[100];

你也没有用分号结束结构,所以它甚至不太可能编译:

#define  DATA  struct   data
DATA
{
  int id;
  char data;
};

最后,您以相当不安全的方式使用printf;第一个参数需要是格式字符串,否则如果第一个参数中包含%,则可能会出现奇怪的行为:

printf("%c\n", listOfData[5].data);

答案 2 :(得分:0)

您尚未显示DATA *的任何内存分配。将数组声明为结构数据数组,如:

DATA listOfData[100];

或动态分配内存并在数组中分配指针。