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

时间:2014-05-07 12:09:20

标签: c pointers

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

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.

所以我很困惑,因为我认为我昨天完成了同样的事情并且它有效,然后我改变了我的代码但决定改回来。

pt.entry不是一个指针数组?我在这里缺少什么?

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

1 个答案:

答案 0 :(得分:6)

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

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

PT_ENTRY *entry[128];

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

some_function(&pt.entry[some_index]);