2017-10-22 5 views
-1

それは私には罰金だが、私はそれを構築しようとすると、GCCはgccポインタエラー ' - >'を使用しましたか?

c206.c: In function ‘DLInsertFirst’: c206.c:104:8: error: ‘*newPtr’ is a pointer; did you mean to use ‘->’? newPtr->lptr = NULL;

c206.c:109:18: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] L->First->lptr = newPtr;

言う私は、ヘッダー・ファイル内の構造体

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; 
} 

を持っています私のコードがどこに間違っているのか教えていただけますか?そして、なぜ私はそれを使用するときに ' - >'を使用するように指示するのですか?ありがとう

+5

あなたの間違いは*ポインタ*のtypedefを使用しています。 'tDLElemPtr'は*すでに*ポインタですので、 'tDLElemPtr newPtr'と書くべきです。それとも、うまくいけば、このような混乱するtypedefの追加をやめてください。あなたが見るように、彼らは悪い習慣です。 –

+0

私はそこでtypedefを使用しなければなりません。変更することはできません –

+0

'tDLElemPtr * newPtr *(tDLElemPtr *)malloc(sizeof(struct tDLElem));'スペースの間違った割り当てを割り当てます構造体全体のサイズ)。私はあなたが 'tDLElemPtr newPtr = malloc(sizeof * newPtr);' –

答えて

1

コメントに記載されているように、正しく構造体へのポインタを使用していません。 tDLElemPtrこのtypedefを使用

typedef struct tDLElem {     
     int data;     
     struct tDLElem *lptr;  
     struct tDLElem *rptr; 
} *tDLElemPtr; // note that tDLElemPtr is a pointer!! 

あなたは宣言する変数がstruct tDLElem *であることを意味する(ポインタ!!!)、これtDLElemPtr *newPtrnewPtr->lptr = NULL;が実際に(*newPtr)->lptr = NULL;する必要がありますを意味し、ポインタ(struct tDLElem **)へのポインタです(私が追加ここでは構造体自体にアクセスする別の間接参照)。

0

私はあなたの最初のデータ構造体は次のようになります疑い:

struct tDLElem {     
    int data;     
    struct tDLElem* lptr;  
    struct tDLElem* rptr; 
}; 
typedef struct tDLElem* tDLElemPtr; 

これは何が起こっているのか、それをより明確にすべきです。

関連する問題