我有代码:
main()
{
typedef struct
{
int data;
} Information;
typedef Information *PtrInformation;
typedef struct InformationListStruct *PtrInformationListStruct;
typedef struct InformationListStruct
{
PtrInformationListStruct ptrNext;
PtrInformation ptrInf;
} PtrInformationListStructElement;
//==============================
PtrInformationListStruct list;
list = (PtrInformationListStruct)malloc(sizeof(InformationListStruct));
PtrInformation ptr = (*list).ptrInf; // error !!!
}
编译器抛出错误:
如果我把这一行:
typedef struct InformationListStruct *PtrInformationListStruct;
之后:
typedef struct InformationListStruct
{
PtrInformationListStruct ptrNext;
PtrInformation ptrInf;
} PtrInformationListStructElement;
然后出现其他错误:
如何正确获取“ptrInf”?
答案 0 :(得分:5)
You shouldn't cast malloc()
's return in C.另外,请使用sizeof
,不要重复输入类型名称:
list = malloc(sizeof *list);
答案 1 :(得分:3)
你需要
list = (PtrInformationListStruct)malloc(sizeof(struct InformationListStruct));
// |
// note struct keyword
或
list = (PtrInformationListStruct)malloc(sizeof(PtrInformationListStructElement));
因为你有一个typedef
。
答案 2 :(得分:1)
您正在使用哪个编译器,在visual studio中,您的代码正在成功编译。请避免在函数体内进行类型定义。