在C中创建包含结构数组的struct时遇到问题

krb*_*686 0 c pointers

好吧,我有一些类型的定义:

typedef struct {
    int validBit
    int pageNumber
} PT_ENTRY;

typedef struct {
    PT_ENTRY entry[128];
} PT;
Run Code Online (Sandbox Code Playgroud)

稍后在代码中,我尝试:

PT pt = {};

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

这给了我错误:

Incompatible types in assignment.
Run Code Online (Sandbox Code Playgroud)

所以我很困惑,因为我认为我昨天完成了同样的事情而且工作正常,然后我改变了我的代码但决定改回来.

pt.entry不是一个指针数组?我在这里错过了什么?

或者更好的是,创建包含128个结构数组PT_ENTRY的结构PT的最佳和最快方法是什么?

Som*_*ude 6

这是因为entry数组中的条目不是指针.它是一组实际结构,而不是结构指针.

如果你想要一个指针数组,你需要将数组声明为

PT_ENTRY *entry[128];
Run Code Online (Sandbox Code Playgroud)

但是你需要考虑一下你是否真的需要一个指针数组?很可能你不需要它,应该让它像它一样.因此,没有内存可以分配,没有内存可以释放,不用担心内存泄漏或无效指针.如果在某些时候,您需要将单个PT_ENTRY作为指针传递,那么您可以使用address-of运算符&:

some_function(&pt.entry[some_index]);
Run Code Online (Sandbox Code Playgroud)