【发布时间】:2018-04-03 01:11:41
【问题描述】:
我在头文件中定义了结构
typedef struct tDLElem {
int data;
struct tDLElem *lptr;
struct tDLElem *rptr;
} *tDLElemPtr;
typedef struct {
tDLElemPtr First;
tDLElemPtr Act;
tDLElemPtr Last;
} tDLList;
我有这个代码
void DLInsertFirst (tDLList *L, int val) {
tDLElemPtr *newPtr = (tDLElemPtr *) malloc(sizeof(struct tDLElem));
if (newPtr == NULL)
DLError();
newPtr->lptr = NULL;
newPtr->rptr = L->First;
newPtr->data = val;
if (L->First != NULL)
{
L->First->lptr = newPtr;
}
else
{
L->Last = newPtr;
}
L->First = newPtr;
}
这对我来说似乎很好,但是当我尝试构建它时,gcc 说
c206.c:在函数“DLInsertFirst”中:c206.c:104:8:错误:“*newPtr”是 一个指针;你的意思是使用'->'吗? newPtr->lptr = NULL;
c206.c:109:18:警告:来自不兼容指针类型的赋值 [-Wincompatible-pointer-types] L->First->lptr = newPtr;
你能告诉我我的代码哪里错了吗?主要是为什么当我在那里使用它时它告诉我使用'->'?谢谢
【问题讨论】:
-
你的错误在于 pointers 使用了 typedef。
tDLElemPtr已经是一个指针,你应该写 'tDLElemPtr newPtr. Or even better, stop adding such confusingtypedef`s - 如你所见,这是一个不好的做法。 -
我必须在那里使用 typedef,我无法更改它
-
tDLElemPtr *newPtr = (tDLElemPtr *) malloc(sizeof(struct tDLElem));分配了错误的空间量(您有一个指向指针的指针,但您分配了整个结构的大小)。我怀疑你想要tDLElemPtr newPtr = malloc(sizeof *newPtr);