2013-10-04 33 views
1

在下面的代碼exerpt中,它給了我警告:對於所提到的兩行,從不兼容的指針類型進行分配。我究竟做錯了什麼?更改鏈接列表中指針地址的問題

typedef struct { 
    char* string; 
    struct samplelist* nextchunk; 
    struct samplelist* prevchunk; 
} samplelist; 

samplelist* startsamplelist; 
samplelist* lastsamplelist; 


samplelist* newchunk = checked_malloc(sizeof(samplelist)); 

lastsamplelist->nextchunk = newchunk; //warning here 
newchunk->prevchunk = lastsamplelist; // warning here 
lastsamplelist = newchunk; //no problem here though 

編輯:附上相關定義,下面的答案不依賴代碼補充。是語法錯誤

+0

post'checked_malloc' code –

+0

你爲什麼不這樣做:'newchunk = (samplelist *)malloc(sizeof(samplelist));' –

+0

這是一個我被告知要使用的庫。 – Jiexi

回答

1

這裏的問題:你需要後struct

typedef struct samplelist { 
    char* string; 
    struct samplelist* nextchunk; 
    struct samplelist* prevchunk; 
} samplelist; 
一般

的第一行還添加符號samplelist,則可能是:

typedef struct foobar { 
    char* string; 
    struct foobar* nextchunk; 
    struct foobar* prevchunk; 
} samplelist; 

PS:我個人認爲typedef s吸和最好使用非常節省

+0

這是一段很大的代碼。假設** startsamplelist **和** lastsamplelist **的初始化方式與** newchunk **相同​​。 – Jiexi

+0

@Jiexi用正確的解決方案更新 – necromancer

+1

哇,謝謝! – Jiexi