2014-05-07 87 views
0

好吧,我有一些類型定義,如:遇到問題用C創建包含結構的數組結構

typedef struct { 
    int validBit 
    int pageNumber 
} PT_ENTRY; 

typedef struct { 
    PT_ENTRY entry[128]; 
} PT; 

代碼後來,我嘗試:

PT pt = {}; 

int i; 
for(i=0;i<128;i++){ 
    pt.entry[i] = malloc(sizeof(PT_ENTRY)); 
} 

這給我的錯誤:

Incompatible types in assignment. 

所以我很困惑,因爲我認爲我昨天做了同樣的事情,它工作,然後我改變了我的代碼,但deci戴德把它改回來。

是不是pt.entry指針數組?我在這裏錯過了什麼?

或者更好的是,創建這個包含128個結構數組PT的PT_ENTRY的結構PT的最好和最快的方法是什麼?

回答

6

這是因爲entry數組中的條目不是指針。它是一個實際結構的數組,而不是指向結構的指針。

如果你想要一個指針數組,你需要聲明數組作爲

PT_ENTRY *entry[128]; 

但你要想想,如果你真的需要指針數組?很可能你不需要它,應該讓它像現在一樣。那麼沒有內存可以分配,沒有內存可用,不用擔心內存泄漏或指針無效。如果,在某些時候,你需要傳遞一個PT_ENTRY爲指針,那麼你可以使用該地址的運營商&

some_function(&pt.entry[some_index]); 
+0

啊,我想我沒有刪除那個小*。好,這就是我想聽到的,我不需要一個指針數組。謝謝! – krb686