main.h
#define DATA struct data
DATA
{
int id;
char data;
}
的main.c
DATA *listOfData[100];
所以在这一点上我将/应该能够像这样访问列表中的DATA:
printf(listOfData[5]->data);
这不是让我这样做的,运行只是在最后一次打印时冻结......没有任何错误或任何错误。
答案 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];
或动态分配内存并在数组中分配指针。